我有一个简单的程序。
public class RaviTest {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("The test ID is (.*?)");
Matcher matcher = pattern.matcher("The test ID is 152454");
System.out.println(matcher.find());
System.out.println(matcher.group(1));
}
}
我期望该程序的输出是“152454”,但它打印的是空格“”。
如果我尝试打印 matcher.group(0),它会打印“测试 ID 是”。
编辑:
如果我使用 matcher.matches() 而不是 matcher.find(),它会正确打印。
请帮助我理解我哪里出了问题。
最佳答案
*
匹配 0 次到无限次,而 ?
使其变得懒惰,这意味着它将尝试匹配尽可能少的次数,因此在本例中,.*?
将始终匹配空字符串。
您可以尝试删除 ?
以使其变得贪婪,或者仅将 *?
替换为 +
以使其在 1 和无限之间匹配次。
关于java - Matcher.group() 没有给出正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44794356/