正则表达式?=,?!=,?<=或?<!最容易理解的一种思维方法

正则表达式?=,?!=,?<=或?<!最容易理解的一种思维方法

介绍这一块语法的时候有这么一句话:可以使用非捕获元字符 ?:、?= 或 ?! 来重写捕获,忽略对相关匹配的保存**

这个的重写捕获是关键词,
我先假设你知道这四个的中文名称,不知道也别去查,那个看着费劲,翻译过来的,很难理解。

所以这类正则式分两步

第一步:匹配

首先别管什么正向反向肯定否定,正则式能匹配上才有第二步,假设原字符串是abcdefgh

/.(?=cde)../

在原字符串里面能不能找到包含cde,且cde前面有一个点(除换行符等的任何单个字符),而且从c开始后面有两个字符的字符串?

显然可以,根据上式,abcdefgh中能够匹配到bcde

第二步:重写捕获

再根据正向反向,肯定否定来重写,这里只讨论肯定(即先不讨论?!和?<!)的两种情况。
首先你要记住现在你已经匹配到了bcde

/.(?=cde)../
  • 这种叫正向,所以表达式cde前面所匹配到的字符b不变,只需要看表达式的后面决定重写的是什么,后面是两个点,所以从c开始由前往后读两个字符,即cd,将其重写进中间括号匹配的结果(原本是cde),所以最终结果是bcd(不变的d和重写的cd组成)。这里用/.(?=cde)cd/得到的结果是一样的。
  • 如果后面是四个点,则从c开始由前往后读四个,即cdef,所以最终结果是bcdef。 这里用/.(?=cde)cdef/得到的结果是一样的。

但是记住,后面也是要从c开始匹配,如果匹配不上,这里就会返回null,比如/.(?=cde)f/或者/.(?=cde)d/都是会返回null的(即不匹配)。

对于(?<=)

同样分两步,第一步同上。

/....(?<=cde)../

这个是反向查找,所以找到包含cde,且cde后面有两个字符,从e开始往前找有四个字符的字符串。
abcdefgh中匹配到了bcdefg

第二步

这个是反向查找,所以cde后面的两个点对应的两个字符不变,即fg前面有一个点,加上是反向,所以cde中的e从后往前读四个字符,即bcde,所以最终结果是bcdefg

同样的如果前面是两个点/…(?<=cde)…/就从e开始往前读四个点,结果是defg。

举二反四,我相信这个语法就没什么难度了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值