使用正则表达式捕获多个组

时间:2015-11-24 23:34:29

标签: java regex matcher

我试图在Java中制定一个正则表达式来捕获多个组。这是我试图捕获的字符串(让我们调用output ...)

ltm virtual MY_VM {
    rules {
        foo_bar
        baz
        qux-baz
    }
}

我试图捕捉最内部括号之间的所有内容,即foo_barbazqux-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));
}

但是,如果我在列表中只有一个项目,那么这当然只匹配。我如何修改我的正则表达式以匹配最内部括号中的任意数量的捕获组,假设每个组由换行符分隔,并且我的示例中有任何数量的空格?

3 个答案:

答案 0 :(得分:0)

如果不需要配对检查,这应该适合您:

.*\{([^}]*)
在java中

将是:

String regex = ".*\\{([^}]*)";
  • 请注意,您需要 DOTALL 标志
  • 阅读捕获组1,最内侧括号内的所有文本都将在那里。

答案 1 :(得分:0)

@stribizhev在此link给出的答案也适用于这个问题:

>>> offsets = {off for off, dst, abbr in pytz.timezone('Asia/Calcutta')._tzinfos}
>>> for utc_offset in offsets:
...     print(utc_offset)
... 
5:30:00
6:30:00
5:53:00

答案 2 :(得分:-1)

我现在从未在java uptill中使用过regExpr,但是如果我能正确理解你的问题,Kleene明星操作会帮助你。

https://en.wikipedia.org/wiki/Kleene_star