字符串:
50-60*70/50+(1+7-(9+51))+5*9/10
想要:
9 +51
尝试过:
(?:\(|\G[\+\*\/-])\K(\d+)
结果:
1 7 9 51
最佳答案
您似乎正在使用 PCRE 正则表达式来获取可以在没有内部 ()
的 (...)
中以数学运算符开头的数字。
使用
(?:\(|(?!^)\G)\K[+*\/-]?\d+(?=[^()]*\))
参见 regex demo
解释:
(?:\(|(?!^)\G)\K
- 查找(
或上一次成功匹配的结尾,并省略匹配文本当前存储在内存中(带\K
)[+*\/-]?
- 一个或零个运算符\d+
- 一个或多个数字(?=[^()]*\))
- 但前提是后跟(
和)以外的零个或多个字符
> 直到结束)
。
请注意,在您的正则表达式中,您省略了数学运算符,因为它们位于 \K
之前,并且您会在数学运算符或 (
之后找到数字(以及结束之后每次成功匹配,这就是为什么你得到 1
、7
、9
、51
。
关于regex - 仅一组捕获数次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35600023/