在修饰匹配次数的符号后加一个“?”,则表示匹配尽可能少的字符,这叫正则表达式的非贪婪模式。
| 字符串 | 正则表达式 | 匹配结果 |
| <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点。
本文通过实例对比介绍了正则表达式中非贪婪模式的概念及其应用,演示了如何使用非贪婪模式匹配尽可能少的字符。
228

被折叠的 条评论
为什么被折叠?



