正则表达式和下一个符号不是'('

Ole*_* Sh 5 regex

我想要一个表达式,找到值后的下一个符号不是“(”。

我有以下基本正则表达式:

(([_A-Za-z]([_\w])+)|([A-Za-z]))
Run Code Online (Sandbox Code Playgroud)

和文字,例如:

a3+red+42+_dv+Sy(w12+44)
Run Code Online (Sandbox Code Playgroud)

希望的正则表达式应返回:

a3, red, _dv, w12
Run Code Online (Sandbox Code Playgroud)

这个正则表达式返回

a3, red, _dv, Sy, w12
Run Code Online (Sandbox Code Playgroud)

但我需要排除“ Sy”,因为下一个符号是“(”。

我尝试以下方法:

(([_A-Za-z]([_\w])+)|([A-Za-z]))(\b)
Run Code Online (Sandbox Code Playgroud)

但它返回

a3+, red+, _dv+, w12)
Run Code Online (Sandbox Code Playgroud)

我不需要下一个符号,仅当下一个符号不是“(”时才需要包含。

Cas*_*yte 4

你需要做三件事:

  • 将模式包含在原子组中(或者至少是包含量词的交替的第一部分)

  • 以单词边界开始您的模式(以快速避免无用的位置)

  • 使用前瞻断言来测试下一个字符(如果有)

结果:

\b((?>[_A-Za-z]\w+)|[A-Za-z]\b)(?!\()
Run Code Online (Sandbox Code Playgroud)

在这种情况下,第 1 点对于阻止回溯机制非常重要:Abcd(没有它,模式将成功并返回Abc。使用原子组,模式将匹配Abcd,并且由于它无法返回,因此下一个字符将失败。

编写模式的其他方式:

\b(?>[A-Za-z]\w*|_\w+)(?!\()
Run Code Online (Sandbox Code Playgroud)