Java 使用正则表达式捕获多个组
我正试图用Java编写一个正则表达式来捕获多个组。这是我试图从中捕获的字符串(让我们调用isJava 使用正则表达式捕获多个组,java,regex,matcher,Java,Regex,Matcher,我正试图用Java编写一个正则表达式来捕获多个组。这是我试图从中捕获的字符串(让我们调用isoutput) ltm virtual MY_VM { rules { foo_bar baz qux-baz } } 我试图捕捉最里面的括号中的所有内容,即foo_bar,baz,和qux baz。到目前为止我已经 String regex = "ltm\\svirtual\\sMY_VM\\s\\{\\s*\\n\\s*rules\\s
output
)
ltm virtual MY_VM {
rules {
foo_bar
baz
qux-baz
}
}
我试图捕捉最里面的括号中的所有内容,即foo_bar
,baz
,和qux baz
。到目前为止我已经
String regex = "ltm\\svirtual\\sMY_VM\\s\\{\\s*\\n\\s*rules\\s\\{\n\\s*([^\n]*)\\s*\\}\n\\s*\\}";
final Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(output);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
但这当然只在列表中只有一项时匹配。我如何修改我的正则表达式以匹配最里面方括号中的任意数量的捕获组,假设每个组由换行符和任意数量的空格分隔,就像我在示例中所做的那样?我现在在java uptill中从未使用过正则表达式,但是如果我正确理解您的问题,克莱恩之星行动会帮你的
如果不需要配对检查,这应该适用于您:
.*\{([^}]*)
在java中,它将是:
String regex = ".*\\{([^}]*)";
- 注意,您需要
标志DOTALL
- 阅读捕获组
,最内侧括号内的所有文本都将出现1
- 由@Stribizev在这里给出的答案也适用于这个问题:
String regex = "(?:\\brules\\s+\\{|(?!^)\\G)\\s+([\\w-]+)";
final Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(output);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
您是否介意编辑您的答案,以便在正则表达式中包含捕获组之前的所有绒毛?例如
ltm虚拟我的{u VM{rules{
等等?为什么我们需要这些?你只需要有“最里面的括号”的东西,不是吗?@user215050*\{/code>已经匹配了ltm虚拟….{…{。。。{
最里面的括号最好包括我指定的文本。在我的用例中它不是100%必需的,但我真的希望它放在那里以防万一。所以ltm-virtual-my_-VM{
和` rules{`只是固定的??是的。而且,这似乎匹配了单个组中的所有内容,甚至包括规则{
字符。我希望它在单独的捕获组中分别匹配foo_bar
、baz
和qux baz