我真的很苦恼这个问题:
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/