正则表达式零宽断言、贪婪与懒惰
零宽断言
如同 ^ 代表开头,$ 代表结尾,\b 代表单词边界一样,先行断言和后行断言也有类似的作用,它们只匹配某些位置,在匹配过程中,不占用字符,所以被称为 “零宽”。
正则表达式的先行断言和后行断言一共有 4 种形式:
- (?=exp) 零宽正向先行断言 (zero-width positive lookahead assertion)
- (?!exp) 零宽负向先行断言 (zero-width negative lookahead assertion)
- (?<=exp) 零宽正向后行断言 (zero-width positive lookbehind assertion)
- (?<!exp) 零宽负向后行断言 (zero-width negative lookbehind assertion)
1. ?=exp
正向先行断言
匹配后面是 exp 的位置。
2. ?!exp
负向先行断言
匹配后面不是 exp 的位置。
3. ?<=exp
正向后行断言
匹配前面是 exp 的位置。
4. ?<!exp
负向后行断言
匹配前面不是 exp 的位置。
懒惰和贪婪
贪婪:匹配尽可能多的字符。 懒惰:匹配尽可能少的字符。限定符后面加上一个问号’?’
懒惰限定符
代码/语法 | 说明 |
---|---|
*? |
重复任意次,但尽可能少重复 |
+? |
重复1次或更多次,但尽可能少重复 |
?? |
重复0次或1次,但尽可能少重复 |
{n,m}? |
重复n到m次,但尽可能少重复 |
{n,}? |
重复n次以上,但尽可能少重复 |