我需要一个正则表达式,它只匹配包含零个或多个部分的字符串到大括号和零个或多个数字。花括号可以包含任何字符。但在大括号之外,只允许数字
我想匹配的字符串如下:
"34{yy}1232{blabla}"
"{blabla}{xx}34{seq}"
我尝试使用此表达式,但它无法正常工作:
"([0-9]|(\\{(.*)\\}))+"
答案 0 :(得分:2)
你的正则表达式无法工作的原因是因为Kleene-star的贪婪。以您提供的示例为例:
string: {blabla}{xx}34{seq}
regex: { (.*) }
因此(.*)
尽可能匹配。
现在,如果你想捕获每一个数字和每一个花括号部分,你应该让正则表达式非贪婪。您可以使用*?
运算符执行此操作。正则表达式可能是:
([0-9]+|\\{(.*?)\\})+
导致:
string: {blabla}{ x x } 34 {seq }
regex: { (.*?)}{(.*?)}[0-9]+{(.*?)}
(为解释用法增加了空间)。