大括号之间的模式提取

时间:2015-04-09 09:58:37

标签: java regex pattern-matching

我试图在两个大括号内提取文本,例如给出以下字符串

s = "Some text \test{a}{b}{c} even more " 

我只想将b和c中的所有内容提取为字符串。另外,b和c中可能有更多的花括号。我也想提取这个文本。

我一直在查看Java中的一些函数。如下:

String in = "Item(s): \test{x}{y}{z in {X} }";

Pattern p = Pattern.compile("\\{(.*?)\\}");
Matcher m = p.matcher(in);

while(m.find()) {
    System.out.println(m.group(1));
}

但是这给了我大括号中的所有内容

   a="x"
   b="y" 
   c=" z in {X"

其他问题: 如果字符串有多个不同的卷曲括号,如下所示

s1=" Some text \test{a}{b}{c} even more \foo{d}{e}" 

但我仍然只想要b和c。这很容易实现吗?对于这个特定情况,我们可以只进行迭代2和3,但一般情况下,如果有一个较长的文本,其中有多个\ test {} {} {},那就不那么简单了。

s2 = " Some text \test{a1}{b1}{c1} even more \foo{d}{e} and more \test{a2}{b2}{c2} more plus mehr mas" 

然后我想要b1,c1和b2以及c2对于这种情况,我们可以使用if条件检查每个“\ test”并且只进行迭代2和3,但这非常难看。

2 个答案:

答案 0 :(得分:0)

如果您使用的是apache commons lang API,请尝试StringUtils.substringsBetween

String[] bet = StringUtils.substringsBetween("Some text \test{a}{b}{c} even more ", "{", "}");
System.out.println(Arrays.asList(bet))

答案 1 :(得分:0)

如果您只有一个嵌套级别,可以尝试:

[{]([^{}]+|[^{}]*[{][^{}]*[}][^{}]*)[}]