我有这种模式:
Pattern.compile(".*?\\[ISOLATION GROUP (^]+)].*");
我认为这会匹配,例如,这两个字符串:
"[ISOLATION GROUP X] blabla"
"[OTHER FLAG][ISOLATION GROUP Y] blabla"
然后使用group(1)
我可以得到隔离组的名称(在上面的例子中,“X”和“Y”)
然而,matches()
甚至没有返回true。为什么这些字符串与该模式不匹配,模式有什么问题?
答案 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
答案 1 :(得分:0)
您忘了将小组中的字符括在大括号内。
.*?\\[ISOLATION GROUP (^]+)].*
应该成为
.*?\\[ISOLATION GROUP ([^\\]]+)\\].*
<强> Demo 强>
积极的背后隐藏
尝试使用积极的lookbehind?它比我认为的解决方案容易得多,你只需处理一个小组
(?<=ISOLATION GROUP\s)[^\\]]+
答案 2 :(得分:-2)
这应该有效
Pattern.compile(".*?\\[ISOLATION GROUP .*\\].*");