先看两端代码:
String s = "/m/t/wd/nl/n/p/m/wd/nl/n/p/m/wd/nl/n/p/m/v/n";
Pattern p = Pattern.compile("/m/t.*/nl/n/p/m");
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group());
System.out.println(m.start());
System.out.println(m.end());
}
运行结果:
/m/t/wd/nl/n/p/m/wd/nl/n/p/m/wd/nl/n/p/m
0
40
String s = "/m/t/wd/nl/n/p/m/wd/nl/n/p/m/wd/nl/n/p/m/v/n";
Pattern p = Pattern.compile("/m/t.*?/nl/n/p/m");
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group());
System.out.println(m.start());
System.out.println(m.end());
}
运行结果:
/m/t/wd/nl/n/p/m/wd/nl/n/p/m/wd/nl/n/p/m
0
40
只是在.*后加了一个“?”, 结果就大不一样了。 可以这样说,如果想贪婪匹配,用.*, 如果想勉强匹配,就用.*?。