正反向肯否定预查的外行级理解

正则有个好玩的东西就是正(反)向肯(否)定预查,看了些东西感觉很不适合外行们理解,起码我是不理解。然后就拿来试了一下,觉得有必要补充一点东西。

首先最简单的:

前后啥也不加,(?=pattern)怎么作用。

可以看到每个0的前面都加了个中文“啊”,用中文是为了看得明显。那么此时可以理解为,(?=0)实际上匹配的是0前面那个间隔。

同理(?<=pattern)匹配的是字符串后面那个间隔,如图所示“啊”的位置。

那么(?!pattern)匹配非pattern字符串前面那个间隔,(?<!pattern)匹配非pattern字符串后面那个间隔。示例就不必放了。

然后就有了一系列非常愚蠢的匹配测试。比如匹配“0后面那个间隔的前面是0的字符串”,就是匹配单个的0,结果如下:

匹配“0后面那个间隔的前面是a的字符串”,就是说一个字符既是0又是a,这怎么可能匹配到东西。结果也确实没这么蠢的东西:

然后是正规的用法,匹配“0后面那个间隔的后面是a的字符串”,就是匹配“0a”里面的a,结果如下:

同理匹配a0里面的a就用a(?=0),就不测试了。

最后是网上看来的骚花用法,比如匹配a-z但是不要b,就相当于匹配“a-z前面那个间隔后面不是b的字符串”,相当于把匹配位置的光标给折回来了,判断了两次。结果如下:

就是匹配了其他字母,但是不匹配b。这种用途可能还有更直接的方法,但没查到,用这个至少能找对位置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值