|
问题1:
最近碰到一个问题,就是如何根据两端的字符来匹配相应的字符串,正则表达式如何写?
答案是用(.*?)
分析:
例如,\\[(.*?)\\]这个正则表达式匹配两端是[]符号的字符串
其中一点代表任意字符,星号代表字符串长度,?表示限制贪婪匹配
以下是有?的情况下,即当第一次匹配到 ] 停止,开始查找 [,进行第二次匹配查找。
String regEx = "\\[(.*?)\\]";
String str = "abc[123]def[ghi]456";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
while( matcher.find() )
{
System.out.println( "" + matcher.group() );
}
结果:[123]
[ghi]
对比下面是无?的情况,即贪婪匹配。
String regEx = "\\[(.*)\\]";
String str = "abc[123]def[ghi]456";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
while( matcher.find() )
{
System.out.println( "" + matcher.group() );
}
结果:[123]def[ghi]
扩展:
匹配多个非逗号字符串 [^,]+
abc,def,ghi
结果 abc def ghi |