微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

(([_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+)(?!\()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐