[英]What's wrong with my RegEx pattern
我有这种模式:
Pattern.compile(".*?\\[ISOLATION GROUP (^]+)].*");
我假设这将与以下两个字符串匹配:
"[ISOLATION GROUP X] blabla"
"[OTHER FLAG][ISOLATION GROUP Y] blabla"
然后使用group(1)
可以获得隔离组的名称(在上面的示例中,“ X”代表“ Y”)
但是matches()
甚至没有返回true。 为什么这些字符串与该模式不匹配,该模式出了什么问题?
在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
您忘记将组的字符括在大括号中。
.*?\\[ISOLATION GROUP (^]+)].*
应该成为
.*?\\[ISOLATION GROUP ([^\\]]+)\\].*
正向后看
尝试使用正向后视吗? 它比您认为的解决方案容易得多,您只需要处理一个小组
(?<=ISOLATION GROUP\s)[^\\]]+
这应该工作
Pattern.compile(".*?\\[ISOLATION GROUP .*\\].*");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.