Java找不到正则表达式的匹配项

时间:2019-05-21 17:42:54

标签: java regex

我一直试图弄清楚为什么Java无法找到此正则表达式模式的匹配项,我用https://regexr.com/对其进行了测试,并且效果很好。

但是当我将其转义并在课堂上使用时,它抱怨找不到匹配项。

我在regexr.com中使用的正则表达式模式 模式:TEST\(":"\)\/(\w+)\[@name="(.*)"\] 要测试的字符串:TEST(":")/Role[@name="TestRole"] 该网站可以找到两个组:1.角色和2. TestRole。这就是必需的行为。

但是当我在代码中使用它时,我的测试返回但没有找到匹配项,这是转义的模式和测试字符串:

   public String extractCorrectExp() {
        String path1 = "TEST(\":\")/Role[@name=\"TetsRole\"]";
        String pattern = "TEST\\(\":\"\\)\\/(\\w+)\\[@name=\"(.*)\"\\]";
        Pattern pat = Pattern.compile(pattern);
        Matcher match = pat.matcher(path1);
        return match.group();
    }

它返回:

java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:536)
    at java.util.regex.Matcher.group(Matcher.java:496)

这是逃避问题吗?或以某种方式我正在使用与Java不兼容的正则表达式标识符?

1 个答案:

答案 0 :(得分:3)

必须在Matcher上调用

find(),然后才能调用group()。如果将代码更改为:

String path1 = "TEST(\":\")/Role[@name=\"TestRole\"]";
String pattern = "TEST\\(\":\"\\)/(\\w+)\\[@name=\"(.*)\"]";
Pattern pat = Pattern.compile(pattern);
Matcher match = pat.matcher(path1);
if ( match.find() ) {
    System.out.println(match.group());
}

如果条件可以用于单个匹配,而while循环可以用于多个匹配。