java正则表达式反对大括号和数字

时间:2014-12-30 15:10:26

标签: java regex

我需要一个正则表达式,它只匹配包含零个或多个部分的字符串到大括号和零个或多个数字。花括号可以包含任何字符。但在大括号之外,只允许数字

我想匹配的字符串如下:

 "34{yy}1232{blabla}"

 "{blabla}{xx}34{seq}"

我尝试使用此表达式,但它无法正常工作:

   "([0-9]|(\\{(.*)\\}))+"

1 个答案:

答案 0 :(得分:2)

你的正则表达式无法工作的原因是因为Kleene-star的贪婪。以您提供的示例为例:

string: {blabla}{xx}34{seq}
regex:  {      (.*)       }

因此(.*)尽可能匹配。

现在,如果你想捕获每一个数字和每一个花括号部分,你应该让正则表达式非贪婪。您可以使用*?运算符执行此操作。正则表达式可能是:

([0-9]+|\\{(.*?)\\})+

导致:

string: {blabla}{ x x } 34   {seq  }
regex:  { (.*?)}{(.*?)}[0-9]+{(.*?)}

(为解释用法增加了空间)。