介绍
有些结构并不真正匹配文本,而是负责判断在某个位置左/右侧的文本是否符合要求,这种结构被称为断言。
常见的断言有3类:
- 单词边界
- 行起始/结束位置
- 环视
单词边界
记为\b,它匹配的是”单词边界位置“,而不是字符。
字符串 | \brow\b | \brow | row\b |
tomorrow | ok | ||
brown | |||
row | ok | ok | ok |
rowdy | ok | ||
说明 | 只能是单词row | \b的右侧是单词字符,所以左侧不能是单词字符 | \b的左侧是单词字符,所以右侧不能是单词字符 |
根据上示例表,可得出:
- 单词边界并不区分左右
- 单词字符要求“另一边不是单词字符”,而不是“另一边的字符不是单词字符”
行起始/结束位置
在正则表达式中,用来匹配位置的元素叫做锚点,它被用来定位到某个位置。
字符串的起始位置:^
不同平台下的行终止符
平台 | 行终止符 |
Unix/Linux | \n |
Windows | \r \n |
Mac OS | \n |
要匹配多行模式,在表达式前面加上(?m)
字符串的结尾位置:$
环视
在某个位置向左/右看,必须出现或不能出现某类字符。
1 |
<(?!/) |
解析:
上述正则表达式,(?!/)是一个环视结构,(?!...)是环视的标识,/才是真正的表达式,整个结构表达的含义是:当前位置之后(右侧),不允许出现/能匹配的文本
环视的分类
名字 | 记法 | 判断方向 | 匹配成功的返回值 |
肯定顺序环视 | (?=...) | 向右 | True |
否定顺序环视 | (?!...) | 向右 | False |
肯定逆序环视 | (?<=...) | 向左 | True |
否定逆序环视 | (?<!...) | 向左 | False |
环视的价值
- 集中关注某个部分
- 添加复杂的限制
- 不干扰其他部分的匹配
环视的组合
环视匹配的并不是字符,而是位置。所以,在正则表达式匹配时,环视结构匹配成功,并不会更改“当前位置”,也就是说,多个环视可以组合在一起,实现在同一个位置的多重判断。
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 正则表达式_字符组01/13
- ♥ Deelx正则引擎使用12/24
- ♥ Deelx正则表达式语法12/23
- ♥ C++_volatile10/08
- ♥ 2023_02_2002/20
- ♥ RFB 协议05/25