我一直试图弄清楚为什么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不兼容的正则表达式标识符?
答案 0 :(得分:3)
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循环可以用于多个匹配。