零宽度断言(预搜索)
- 只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度。
- 这个位置应该符合某个条件。判断当前位置的前后字符,是符合指定的条件,但不匹配前后的字符。是对位置的匹配。
- 正则表达式匹配过程中,如果子表达式匹配到的字符内容,而非位置,并被保存到最终的匹配结果中,那么就认为这个子表达式是占有字符的;如果子表达式匹配的仅仅是位置,或者匹配的内容并不保存到最终的匹配结果中,那么就认为这个子表达式是零宽度的。占有字符还是零宽度,是针对匹配的内容是否保存到最终的匹配结果中而言的。
| 符号 | 名字 | 描述 |
|---|---|---|
| reg(?=exp) | 零宽度正先行断言 | reg匹配的内容后面内容满足exp规则 |
| reg(?!exp) | 零宽度负先行断言 | reg匹配的内容后面内容不满足exp规则 |
| (?<=exp)reg | 零宽度正后发断言 | reg匹配的内容前面满足exp规则 |
| (?<!exp)reg | 零宽度负后发断言 | reg匹配的内容前面内容不满足exp规则 |
下面来分别说下,这几个的用法
reg(?=exp)
image.png
匹配到H,H是在8的前面,且只匹配一个字符
reg(?!exp)
占有字符匹配规则与reg(?=exp)相反,
image.png
o和d之后都不是字母和数字,所以匹配成功
(?<=exp)reg
image.png
\s匹配到World前的空格,\w{5}匹配到World
(?<!exp)reg
占有字符匹配规则与(?<=exp)reg相反,
image.png








网友评论