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

时间:2017-06-28 05:35:10

标签: 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(),它会正确打印。

请帮助我了解我哪里出错了。

1 个答案:

答案 0 :(得分:3)

PropertySourceBootstrapConfiguration在0和无限次之间匹配,*使其变得懒惰,这意味着它会尽可能少地匹配,因此在这种情况下,?将永远匹配一个空字符串。

您可以尝试删除.*?以使其变得贪婪,或者只需将?替换为*?,以使其在1和无限次之间匹配。