2

对于{123{a,b}}我想要匹配的构造{123{}}.

这是由正则表达式完成的:{(.*?){|}}

但是:现在我想使用相同的表达式来运行并仅{a,b}匹配。{}

因此,我必须以某种方式使第二个{可选。但是怎么做?

我正在使用http://gskinner.com/RegExr/进行即时测试。

4

3 回答 3

3

您可以使用以下正则表达式:

(?:{.*?)?{|}}?

这使得内大括号之外的所有内容都是可选的。

(?:{.*?)?   // Contents before the opening inner brace '{' (Optional)
 {   
   |
 }
}?          // Last brace (Optional)

请参阅http://regexr.com?35t3r上的演示

于 2013-08-09T10:56:29.980 回答
0

例如,怎么样

/{(123{)?/
于 2013-08-09T10:52:59.830 回答
0

尝试使用此代码:

Pattern pattern = Pattern.compile("\\{(.*\\{|[^\\}]*)");
        Matcher matcher1 = pattern.matcher("{123{a,b}}");
        Matcher matcher2 = pattern.matcher("{a,b}");

        while (matcher1.find()) {
            System.out.println(matcher1.group());
        }
        while (matcher2.find()) {
            System.out.println(matcher2.group());
        }

输出:
{123{
{a,b

于 2013-08-09T10:58:20.330 回答