负向零宽断言:
(?!exp) 零宽度负预测先行断言; 匹配后面不是exp的位置
(?<!exp) 零宽度负回顾后发断言; 匹配前面不是exp的位置
代码示例1:
exp:abZW863ab88; 正则:ab(?![A-Z])
图示:
思考:该正则规则会匹配到该exp哪些结果?是ab还是ab88亦或是ab ab88呢?
分析:首先正则中a来获取控制权,接着开始从第0号位置去匹配。exp中的a是0-1位置,恰好匹配成功,控制权转到正则的b中。此时b会去从第一号位置匹配。exp中的b是1-2位置,恰好匹配成功,接着将控制权转给正则的(?![A-Z])中。此时(?![A-Z])会去匹配第二位置,但是它要求第二位置后面不能是A-Z,那么匹配位置失败,接着将控制权重新发送回正则的a中。...接着到了第7号位置,正则a匹配exp的a成功...最后到了第九号位置,控制权此时是(?![A-Z])。(?![A-Z])开始从第九号位置去匹配,发现8不是A-Z,那么匹配成功,注意:断言匹配的内容不会具有真实性,换句话说断言匹配到这里的8后,发现匹配成功了,那么说明第九号位置它匹配到了,所以一直强调断言匹配的是位置不是内容。由于匹配成功,那么会回到第九号位置,

本文深入探讨了正则表达式中的负向零宽断言,包括零宽度负预测先行断言和零宽度负回顾后发断言。通过代码示例和分析解释了如何使用这些断言以及它们在匹配过程中的作用。最终讨论了一个具体的问题,明确了匹配结果的判断逻辑。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



