我的RegEx模式有什么问题

时间:2018-04-07 15:39:04

标签: java regex matcher

我有这种模式:

Pattern.compile(".*?\\[ISOLATION GROUP (^]+)].*");

我认为这会匹配,例如,这两个字符串:

"[ISOLATION GROUP X] blabla"
"[OTHER FLAG][ISOLATION GROUP Y] blabla"

然后使用group(1)我可以得到隔离组的名称(在上面的例子中,“X”和“Y”)

然而,matches()甚至没有返回true。为什么这些字符串与该模式不匹配,模式有什么问题?

3 个答案:

答案 0 :(得分:2)

在Java中使用正式模式匹配器时,我们不需要使用与整个输入匹配的模式。相反,只需使用模式\[ISOLATION GROUP ([^\]]+)来获取所有匹配项:

String input = "[ISOLATION GROUP X] blabla";
input += "[OTHER FLAG][ISOLATION GROUP Y] blabla";
String pattern = "\\[ISOLATION GROUP ([^\\]]+)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
while (m.find()) {
    System.out.println("Found value: " + m.group(1));
}

Found value: X
Found value: Y

Demo

答案 1 :(得分:0)

您忘了将小组中的字符括在大括号内。

.*?\\[ISOLATION GROUP (^]+)].*

应该成为

.*?\\[ISOLATION GROUP ([^\\]]+)\\].*

<强> Demo

积极的背后隐藏

尝试使用积极的lookbehind?它比我认为的解决方案容易得多,你只需处理一个小组

(?<=ISOLATION GROUP\s)[^\\]]+

答案 2 :(得分:-2)

这应该有效

Pattern.compile(".*?\\[ISOLATION GROUP .*\\].*");