什么是环视
环视只是进行子表达式的匹配,并不占字符,匹配到的内容不保存,因此也叫做零宽断言,环视最终的匹配结果就是一个位置。
环视按照方向可以分为顺序环视和逆序环视两种,按是否进行匹配分为肯定和否定两种,组合起来就是四种模式。
环视表达式 | 解释 |
---|---|
(?=expression) | 顺序肯定环视,表示所在位置右侧能匹配expression |
(?!rexpression) | 顺序否定环视,表示所在位置右侧不匹配expression |
(?<=expression) | 逆序肯定环视,表示所在位置左侧能匹配expression |
(?<!expression) | 逆序否定环视,表示所在位置左侧不匹配expression |
只说概念可能有些抽象,分别举例子来演示一下具体的使用场景。
一些示例
- 顺序肯定环视
1 | # s = 'xiaomi9iphone8iphone7',需要在每个手机型号后面加上逗号,变成 s= 'xiaomi9,iphone8,iphone7' |
- 逆序肯定环视
1 | # s = 'Takes Reservations:No Delivery:No Take-out:Yes Accepts Credit Cards:Yes Good for Groups:No' |
- 顺序否定环视
1 | # s = '123aaa',将s字符串变成 s='123,a,a,a,' |
- 逆序否定环视
1 | # 将 s= 'aaa123'变成 s= ',a,a,a,123' |
有些例子不是很合理,尽量能表达清楚环视的含义即可。
总结:
1 | 环视的功能非常强大,也是正则中的一个难点,对于环视的理解,可以从应用和原理两个角度理解,如果想理解得更清晰、深入一些,还是从原理的角度理解好一些,正则匹配基本原理参考 NFA引擎匹配原理 |