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

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

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

(([_A-Za-z]([_\w])+)|([A-Za-z]))

文字例如:

a3+red+42+_dv+Sy(w12+44)

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

a3,red,_dv,w12

这个基础正则表达式返回

a3,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+)(?!\()

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...