如何匹配可选的出现?

时间:2013-08-09 10:43:18

标签: java regex

对于构建{123{a,b}},我想匹配{123{}}

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

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

因此我不得不让第二个{可选。但是如何?

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

请参阅http://regexr.com?35t3r

上的演示

答案 1 :(得分:0)

怎么样,例如

/{(123{)?/

答案 2 :(得分: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