在修饰匹配次数的符号后加一个“?”,则表示匹配尽可能少的字符,这叫正则表达式的非贪婪模式。
字符串 | 正则表达式 | 匹配结果 |
<a>aaa</a><a>aaaa</a> | <a>(.*?)</a> | 两个<a>aaa</a> |
<a>aaa</a><a>aaaa</a> | <a>(.*)</a> | <a>aaa</a><a>aaaa</a> |
看到这个比较就非常清楚了。
测试程序:
public class Test {
public static void main(String args[]){
String input = "<a>aaa</a><a>aaaa</a>";
String regex = "<a>(.*?)</a>"; // 非贪婪模式
// String regex = "<a>(.*)</a>"; // 贪婪模式
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
while(m.find()){
System.out.println(m.group());
}
}
}
参看:http://www.regexlab.com/zh/regref.htm#othercommon第2.1点。