我在一个Java测试套件中找到了以下问题
Pattern p = Pattern.compile("[wow]*");
Matcher m = p.matcher("wow its cool");
boolean b = false;
while (b = m.find()) {
System.out.print(m.start() + " \"" + m.group() + "\" ");
}
输出似乎如下所示
0 "wow" 3 "" 4 "" 5 "" 6 "" 7 "" 8 "" 9 "oo" 11 "" 12 ""
在最后一次匹配之前很清楚,模式[wow]*会贪婪地匹配0个或多个'w'和'o'字符,而对于不匹配的字符(包括空格),则结果为空字符串。然而,在将最后一个'l'与11""匹配后,接下来的12""似乎不太清楚。测试解决方案中没有详细说明,而我也无法从javadoc中明确找出答案。我最好的猜测是边界字符,但如果有人能提供解释,我会非常感激。
s.length()
时(其中s为“wow its cool”),即12时,它就停止了。 - Charlie(wow)*
这个正则表达式,它表示 "wow" 可以出现任意次数,还是指可以无序、任意次数地出现w
或o
。也就是说,第二个w
是多余的。 - Peter Lawreywhile (b=m.find() && m.start()<s.length())
- Charlie