我的 RegEx 模式有什么问题
What's wrong with my RegEx pattern
我有这个模式:
Pattern.compile(".*?\[ISOLATION GROUP (^]+)].*");
我假设这会匹配,例如,这两个字符串:
"[ISOLATION GROUP X] blabla"
"[OTHER FLAG][ISOLATION GROUP Y] blabla"
然后使用 group(1)
我可以获得隔离组的名称(在上面的示例中,"X" resp. "Y")
然而 matches()
甚至没有返回 true。为什么这些字符串与那个模式不匹配,这个模式有什么问题?
这应该有效
Pattern.compile(".*?\[ISOLATION GROUP .*\].*");
在 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 (^]+)].*");
我假设这会匹配,例如,这两个字符串:
"[ISOLATION GROUP X] blabla"
"[OTHER FLAG][ISOLATION GROUP Y] blabla"
然后使用 group(1)
我可以获得隔离组的名称(在上面的示例中,"X" resp. "Y")
然而 matches()
甚至没有返回 true。为什么这些字符串与那个模式不匹配,这个模式有什么问题?
这应该有效
Pattern.compile(".*?\[ISOLATION GROUP .*\].*");
在 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)[^\]]+