Java正则表达式使用
@TestpublicvoidstrTest(){Stringregex="<<[^>>]+.*?\\(\\$\\{date_min\\}\\)\\s*>>";Strin...
@Test
public void strTest(){
String regex = "<<[^>>]+.*?\\(\\$\\{date_min\\}\\)\\s*>>";
String str = "where<< uiddeid = (${permissionId})>> << and dttime > (${date_min}) >> and max > date_ddd << and dttime > (${date_max})>>";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.replaceAll("88888"));
}
我的目的是:把str中 << and dttime > (${date_min}) >> 替换成88888;其中 and dttime > 是任意可变字符,希望大侠能够帮助,改写一下我的正则或者说清楚应该如何使用匹配!!!! 展开
public void strTest(){
String regex = "<<[^>>]+.*?\\(\\$\\{date_min\\}\\)\\s*>>";
String str = "where<< uiddeid = (${permissionId})>> << and dttime > (${date_min}) >> and max > date_ddd << and dttime > (${date_max})>>";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.replaceAll("88888"));
}
我的目的是:把str中 << and dttime > (${date_min}) >> 替换成88888;其中 and dttime > 是任意可变字符,希望大侠能够帮助,改写一下我的正则或者说清楚应该如何使用匹配!!!! 展开
2个回答
展开全部
你这个问题其实很简单,只需要一句就可以了。
System.out.println(str.replaceAll(" << .*? > \\(\\$\\{date_min\\}\\) >>"," 8888"));
. 表示:匹配除“\n”之外的任何单个字符。若要匹配包括“\n”在内的任意字符,请使用诸如“[\s\S]”之类的模式。
*表示:零次或多次匹配前面的字符或子表达式。例如,zo* 匹配“z”和“zoo”。* 等效于 {0,}。
?表示:当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o”。
这里稍微注意下在"<<"加上空格去匹配,这样就能满足你的需求了.
System.out.println(str.replaceAll(" << .*? > \\(\\$\\{date_min\\}\\) >>"," 8888"));
. 表示:匹配除“\n”之外的任何单个字符。若要匹配包括“\n”在内的任意字符,请使用诸如“[\s\S]”之类的模式。
*表示:零次或多次匹配前面的字符或子表达式。例如,zo* 匹配“z”和“zoo”。* 等效于 {0,}。
?表示:当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o”。
这里稍微注意下在"<<"加上空格去匹配,这样就能满足你的需求了.
追问
非常感谢您能回答我的问题,
String str = "where > (${date_min}) >> and max > date_ddd (${date_max})>>";
这样的话,貌似问题就解决不了了,"<<"前有 空格
辛苦你了。。。。。。。。。。。。。。。。。。
追答
不用客气
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个正则表达式就是由普通字符(例如大小写字母)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"java"中没有包含任何元字符,它可以匹配"java"和"javascript"等字符串,但是不能匹配"Java"。
正则表达式不仅能进行字符串的匹配,还能进行字符串的提取、替换。
示例代码:
String regEx = ".+/(.+)$";
String str = "D:/java/test.txt";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
if (!m.find()){
System.out.println("文件路径格式错误!");
return;
}
System.out.println(m.group(1));
运行结果:test.txt
正则表达式“.+/(.+)$”的含义就是:被匹配的字符串以任意字符序列开始,后边紧跟着字符“/”,最后以任意字符序列结尾,“()”代表分组操作,这里就是把文件名做为分组,匹配完毕就可以通过Matcher 类的group方法取到所定义的分组了。需要注意的这里的分组的索引值是从1开始的,所以取第一个分组的方法是m.group(1)而不是m.group(0)。
在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"java"中没有包含任何元字符,它可以匹配"java"和"javascript"等字符串,但是不能匹配"Java"。
正则表达式不仅能进行字符串的匹配,还能进行字符串的提取、替换。
示例代码:
String regEx = ".+/(.+)$";
String str = "D:/java/test.txt";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
if (!m.find()){
System.out.println("文件路径格式错误!");
return;
}
System.out.println(m.group(1));
运行结果:test.txt
正则表达式“.+/(.+)$”的含义就是:被匹配的字符串以任意字符序列开始,后边紧跟着字符“/”,最后以任意字符序列结尾,“()”代表分组操作,这里就是把文件名做为分组,匹配完毕就可以通过Matcher 类的group方法取到所定义的分组了。需要注意的这里的分组的索引值是从1开始的,所以取第一个分组的方法是m.group(1)而不是m.group(0)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询