java - 正则表达式 - 贪婪量词

标签 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());    
        }    
    }
}  

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

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 - 正则表达式 - 贪婪量词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8553761/

相关文章:

java - PDFBox 如何检测列?

java - Java正则表达式需要新鲜的眼光,这太贪婪了

Java正则表达式查找子串

c++ - 如何访问 OpenCV 匹配器上的点位置?

c++ - GoogleMock:如何精确预期具有特定参数的一次调用,并查看失败诊断?

java - 获取 Hbase 中特定行的所有列值

java - 如何更改 Nimbus 中单个 JProgressBar 的颜色?

JavaScript 正则表达式 - 检查数字匹配的数量

java - 从多部分 HTTP 响应中提取多个 JSON 字符串

c# - 验证正则表达式而不捕获异常?