前向断言/前向预查/正向断言/正向预查(lookahead assertions)

本文介绍了正则表达式中的前向肯定断言(正向预查)和前向否定断言的概念,包括它们的语法和使用示例。前向肯定断言用于检查匹配项后面是否存在特定条件,满足则返回匹配项,否则不返回。前向否定断言则检查匹配项后面是否存在排除条件,不存在则返回匹配项。
摘要由CSDN通过智能技术生成

0 断言

你将从本文中学到正则表达式里的前向肯定断言前向否定断言,包括它们的语法和示例。

前向断言对于构造一个实用的正则表达式来说非常重要,它是周围断言的其中一(另一种是后向断言)。

断言分两个方向:前和后。所谓前向是指我们书写的方向,从左往右写的话就是右向,与前向相反的方向就是后向。

前向断言,顾名思义,就是看看我们匹配项前面的元素是否满足某条件,满足的话就说明这个匹配项是真的匹配,于是返回这个匹配项,否则就说明这是假匹配,那么就不返回此匹配项。

看到这里,读者也许会思考,这和普通的正则项有啥不同呢?为啥非得另起别名呢?

有不同!且不同有二:

  • 一是普通的正则项在结果中有对应的字符串,参与匹配项的提取,即会被捕获,断言则不被捕获,即不进入最终匹配结果;
  • 二是断言的位置固定,前向断言只用于整个正则式的末尾,后向断言则只用于整个正则式的起始。

看到这里,又有疑问了,断言和泊点 ^$ 的用法不就一样了吗?是的!它们的用法很相似!只是要所用场景稍有不同,^$ 卡匹配串的首尾为字符串的头尾,而断言则卡匹配串的首尾须满足所给条件。

某些参考文献中将 lookahead assertion 翻译为 “正向预查”,正向与前向之辩无谓,但“预查”使用不当。预是预先的意思,预查很容易理解成预先查找,也就是先查找前向表达式,而后进行主匹配项查找。实际上这是不对的, lookahead assertion 不是预先进行的查找的,而是指在找到位于它前面的匹配项之后对接下来的元素进行断言,也就是看看满不满足我们的条件,其中的元素也不是查找的对象,而是用于判断匹配是否成功,并不进入要返回的匹配结果。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值