零宽断言

如同 ^ 代表开头,$ 代表结尾,\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 的位置。

-w393

2. ?!exp 负向先行断言

匹配后面不是 exp 的位置。

-w393

3. ?<=exp 正向后行断言

匹配前面是 exp 的位置。

-w393

4. ?<!exp 负向后行断言

匹配前面不是 exp 的位置。

-w393

懒惰和贪婪

贪婪:匹配尽可能多的字符。 懒惰:匹配尽可能少的字符。限定符后面加上一个问号’?’

懒惰限定符

代码/语法 说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

参考