正则表达式 - 贪心量词

zig*_*ggy 0 java regex matcher

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

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());    
        }    
    }
}  
Run Code Online (Sandbox Code Playgroud)

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

java Regex2 "\d*" ab34ef 
Run Code Online (Sandbox Code Playgroud)

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

a b 3 4 e f
^ ^ ^ ^ ^ ^
0 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)

输出应该不是0123445吗?

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

Ada*_*man 8

改变是有帮助的

System.out.print(m.start() + m.group());
Run Code Online (Sandbox Code Playgroud)

System.out.println(m.start() + ": " + m.group());
Run Code Online (Sandbox Code Playgroud)

这样输出更清晰:

0: 
1: 
2: 34
4: 
5: 
6: 
Run Code Online (Sandbox Code Playgroud)

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

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

java Regex2 "\d+" ab34ef
Run Code Online (Sandbox Code Playgroud)

它只会输出

2: 34
Run Code Online (Sandbox Code Playgroud)