java - Matcher.group() 没有给出正确的输出

标签 java regex

我有一个简单的程序。

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/

相关文章:

javascript - 用于嵌入或不包含播放列表的正则表达式 youtube url

regex - 下划线转换为驼峰式正则表达式

python - 在正则表达式中选择破折号后的单词

java - 无法设置 PolygonShape 顶点 Box2D

java - Camel ......评估一个java表达式

java - 示例 Hello World ILOG Jrule?

java - iText:使用 Xmp 在元数据中自定义 Xml 标签

java - 可重入锁问题

正则表达式——忽略到给定点的行

c# - 计算文本文件中特定单词的频率