This question already has an answer here:
SCJP6 regex issue
                                
                                    (1个答案)
                                
                        
                4年前关闭。
            
        

我真的很想这个问题:

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。我不太了解这个输出。为每个字符考虑以下索引:

a b 3 4 e f
^ ^ ^ ^ ^ ^
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

关于java - 正则表达式-贪婪量词[duplicate],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8553761/

10-10 18:51