我想要一个表达式,其中找到值之后的下一个符号不是“(”。
我有以下基本正则表达式:
(([_A-Za-z]([_\w])+)|([A-Za-z]))
和文字例如:
a3+red+42+_dv+Sy(w12+44)
希望的正则表达式应该返回:
a3, red, _dv, w12
这个基本正则表达式返回
a3, red, _dv, Sy, w12
但我需要排除'Sy',因为下一个符号是“(”。
我尝试以下操作:
(([_A-Za-z]([_\w])+)|([A-Za-z]))(\b)
但它返回
a3+, red+, _dv+, w12)
我不需要下一个符号,仅当下一个符号不是“(”时才需要包含。
最佳答案
你需要做三件事:
结果:
\b((?>[_A-Za-z]\w+)|[A-Za-z]\b)(?!\()
在这种情况下,第 1 点对于阻止回溯机制很重要:
Abcd(
没有它,模式将成功并返回 Abc
.使用原子组,模式将匹配 Abcd
并且由于它无法返回,因此下一个字符将失败。编写模式的其他方法:
\b(?>[A-Za-z]\w*|_\w+)(?!\()
关于正则表达式和下一个符号不是 '(',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40950383/