加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:57:21 所属栏目:百科 来源:网络整理
导读:我想要一个表达式,其中找到的值之后的下一个符号不是“(”. 我有以下基础正则表达式: (([_A-Za-z]([_w])+)|([A-Za-z])) 和文字例如: a3+red+42+_dv+Sy(w12+44) 希望的正则表达式应该返回: a3,red,_dv,w12 这个基础正则表达式返回 a3,Sy,w12 但我需要排除
我想要一个表达式,其中找到的值之后的下一个符号不是“(”.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读