正则表达式 – 贪心量词

我真的在努力解决这个问题:

import java.util.regex.*; class Regex2 { public static void main(String[] args) { Pattern p = Pattern.compile(args[0]); Matcher m = p.matcher(args[1]); boolean b = false; while(b = m.find()) { System.out.print(m.start() + m.group()); } } } 

使用以下命令运行上述程序时:

 java Regex2 "\d*" ab34ef 

它输出01234456 。 我真的不明白这个输出。 考虑每个字符的以下索引:

 ab 3 4 ef ^ ^ ^ ^ ^ ^ 0 1 2 3 4 5 

输出不应该是0123445吗?

我一直在阅读,看起来RegEx引擎也将读取字符串的结尾,但我只是不明白。 如果有人可以提供有关如何获得该结果的分步指南,将不胜感激。 即如何找到每个数字。

改变是有帮助的

 System.out.print(m.start() + m.group()); 

 System.out.println(m.start() + ": " + m.group()); 

这样输出更清晰:

 0: 1: 2: 34 4: 5: 6: 

您可以看到它在7个不同的位置匹配:位置2匹配字符串“34”,在任何其他位置匹配空字符串。 最后还有空字符串匹配 ,这就是为什么在输出结尾处看到“6”的原因。

请注意,如果您运行这样的程序:

 java Regex2 "\d+" ab34ef 

它只会输出

 2: 34