正则表达式零宽断言、贪婪与懒惰
零宽断言
如同 ^ 代表开头,$ 代表结尾,\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次以上,但尽可能少重复 |