正则表达式——02:零宽断言

在使用正则表达式时,有时我们需要捕获的内容前后必须是特定内容,但又不捕获这些特定内容的时候,零宽断言就起到作用了。

零宽断言正如它的名字一样,是一种零宽度的匹配,它最终匹配结果只是一个位置而已。

零宽断言有正向(positive)、负向(negative)、先行(lookahead)、后行(lookbehind),一共有4种组合形式:

  • (?=exp) 零宽正向先行断言(zero-width positive lookahead assertion)
  • (?<=exp) 零宽正向后行断言(zero-width positive lookbehind assertion)
  • (?!exp) 零宽负向先行断言(zero-width negative lookahead assertion)
  • (? 零宽负向后行断言(zero-width negative lookbehind assertion)

这里面的exp是一个正则表达式。

(1)先行(lookahead) & 后行(lookbehind)

先行断言,是当扫描指针位于某处时,引擎会尝试匹配指针还未扫过的字符,先于指针到达该字符,故称为先行。

后行断言,引擎会尝试匹配指针已扫过的字符,后于指针到达该字符,故称为后行。

(2)正向(positive)和负向(negative)

正向就表示匹配括号中的表达式,负向表示不匹配。

(3)表达式详解

eg.:(?<=exp)

  • ?表示零宽;
  • reg表示这个宽度为零的(边界)的表达式;
  • <箭头向后,就是lookbehind;没有箭头,默认为正向lookahead;
  • =等于,就是匹配,positive;!不等于就是不匹配,negative;
操作符 说明 实例
(?=exp) 正向先行断言,代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配exp re(?=gular)a regular expression这个字符串,匹配regular中的re,但不会匹配expression中的re
(?<=exp ) 正向后行断言,代表字符串中的一个位置,紧接该位置之前的字符序列能够匹配exp
(?!exp) 负向先行断言,代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配exp
(? 负向后行断言,代表字符串中的一个位置,紧接该位置之前的字符序列不能匹配exp

你可能感兴趣的:(正则表达式——02:零宽断言)