使用正则表达式捕获多个组
Capturing Multiple Groups with Regex
我正在尝试在 Java 中制定一个正则表达式来捕获多个组。这是字符串(我们称之为 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 中使用过 regExpr,但是如果我确实正确理解了您的问题,Kleene star 操作将帮助您解决问题。
如果不需要配对检查,这应该适合您:
.*\{([^}]*)
在 java 中将是:
String regex = ".*\{([^}]*)";
- 请注意,您需要
DOTALL
标志
- 阅读捕获组
1
,最里面括号内的所有文本都将在那里。
@stribizhev 在此 给出的答案也适用于此问题:
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));
}
我正在尝试在 Java 中制定一个正则表达式来捕获多个组。这是字符串(我们称之为 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 中使用过 regExpr,但是如果我确实正确理解了您的问题,Kleene star 操作将帮助您解决问题。
如果不需要配对检查,这应该适合您:
.*\{([^}]*)
在 java 中将是:
String regex = ".*\{([^}]*)";
- 请注意,您需要
DOTALL
标志 - 阅读捕获组
1
,最里面括号内的所有文本都将在那里。
@stribizhev 在此
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));
}