只有一组被捕几次

时间:2016-02-24 10:50:13

标签: regex

字符串:

50-60*70/50+(1+7-(9+51))+5*9/10

需要:

9 +51

尝试:

(?:\(|\G[\+\*\/-])\K(\d+)

结果:

1 7 9 51

1 个答案:

答案 0 :(得分:1)

您似乎正在使用PCRE正则表达式来获取(...)内没有内部()的数学运算符之前的数字。

使用

(?:\(|(?!^)\G)\K[+*\/-]?\d+(?=[^()]*\))

请参阅regex demo

说明:

  • (?:\(|(?!^)\G)\K - 查找(或上一次成功匹配的结束,并省略当前存储在内存中的匹配文字(使用\K
  • [+*\/-]? - 一个或零个运算符
  • \d+ - 一个或多个数字
  • (?=[^()]*\)) - 但只有在()以外的零个或多个字符后跟着结束)

请注意,在正则表达式中,省略数学运算符,因为它们在\K之前,并且您在数学运算符或(之后找到数字(并且在每次成功匹配结束后,即为什么会得到17951