正则表达式--零宽断言

 在网上学习《正则表达式30分钟入门教程》的时候,感觉关于零宽断言的内容写的比较晦涩难懂(郁闷的发现很多网上关于这个内容的介绍就是直接copy了这篇文章的内容),通过自己的理解整理了一下。
第一种是所谓的零宽度正预测先行断言,以(?=exp)的形式出现,它匹配的是exp前面的那个位置,特别要注意的是它匹配的只是一个位置,而不是任何字符。比如,/b/w+(?=ing/b)在查找I'm singing while you're dancing的时候会匹配sing和danc,因为其中的

(?=ing)匹配了singing的sing和ing之间的那个位置,还有dancing的danc和ing之间的位置,即ing之前的那个位置。如果理解了第一

种零宽断言,后面的三种也就很好理解了。
第二种是零宽度正回顾后发断言,以(?<=exp)的形式出现,它匹配的是exp后面的那个位置。同样是上面的那个例子,如果正则表达式变为/b/w+(?<=ing/b),匹配结果就变成了singing和dancing,因为(?<=ing)匹配的是ing后面的位置。
第三种是零宽度负预测先行断言,以(?!exp)的形式出现,它匹配的是后面跟的不是exp的位置。比如/b/w+n(?!g)/w+/b,在查找I'm

singing while you're dancing的时候匹配了dancing,因为n(?!g)指的就是n后面不跟g,所以虽然有好几个单词里都有n,但是只有

dancing里有n后面不跟g。
第四种是零宽度正回顾后发断言,以(?<!exp)的形式出现,它匹配的是前面不是exp的位置。同样是第三种情况的那个例子,如果用/b/w+n(?<!g)/w+/b去查找I'm singing while you're dancing的话会匹配singing和dancing,因为这两个单词的n的前面都不是g。
总之,零宽断言是用来匹配和exp相关的位置的,不是匹配任意的字符。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值