字符串:
50-60*70/50+(1+7-(9+51))+5*9/10
需要:
9 +51
尝试:
(?:\(|\G[\+\*\/-])\K(\d+)
结果:
1 7 9 51
答案 0 :(得分:1)
您似乎正在使用PCRE正则表达式来获取(...)
内没有内部()
的数学运算符之前的数字。
使用
(?:\(|(?!^)\G)\K[+*\/-]?\d+(?=[^()]*\))
请参阅regex demo
说明:
(?:\(|(?!^)\G)\K
- 查找(
或上一次成功匹配的结束,并省略当前存储在内存中的匹配文字(使用\K
)[+*\/-]?
- 一个或零个运算符\d+
- 一个或多个数字(?=[^()]*\))
- 但只有在(
和)
以外的零个或多个字符后跟着结束)
。请注意,在正则表达式中,省略数学运算符,因为它们在\K
之前,并且您在数学运算符或(
之后找到数字(并且在每次成功匹配结束后,即为什么会得到1
,7
,9
,51
。