前瞻断言(lookahead assertion)允许在给定位置上匹配指定模式,而不会改变当前光标位置

表达式

  • (?=pattern): 肯定前瞻断言。

  • (?!pattern):否定前瞻断言。

*前瞻* 二字来源于 lookahead 字符。在编译原理中,lookahead 指向的是当前光标后的字符,这与阅读顺序中的“前”正好相反。

使用

匹配以 $ 结尾的数字

\d+(?=\$)

在上面的例子中,在匹配时首先匹配所有的数字,然后 lookahead 前面的字符是否以 $ 结尾。

匹配以 body 结尾的字符串

(?=.*body).*

在上面的例子中,首先 lookahead 检查给定字符串是否匹配 .*body,注意这时候光标位置并没有改变,依然位于字符串开头,然后再将字符串提取出来。

Last moify: 2022-12-04 15:11:33
Build time:2025-07-18 09:41:42
Powered By asphinx