0 断言
你将从本文中学到正则表达式里的前向肯定断言和前向否定断言,包括它们的语法和示例。
前向断言对于构造一个实用的正则表达式来说非常重要,它是周围断言的其中一(另一种是后向断言)。
断言分两个方向:前和后。所谓前向是指我们书写的方向,从左往右写的话就是右向,与前向相反的方向就是后向。
前向断言,顾名思义,就是看看我们匹配项前面的元素是否满足某条件,满足的话就说明这个匹配项是真的匹配,于是返回这个匹配项,否则就说明这是假匹配,那么就不返回此匹配项。
看到这里,读者也许会思考,这和普通的正则项有啥不同呢?为啥非得另起别名呢?
有不同!且不同有二:
- 一是普通的正则项在结果中有对应的字符串,参与匹配项的提取,即会被捕获,断言则不被捕获,即不进入最终匹配结果;
- 二是断言的位置固定,前向断言只用于整个正则式的末尾,后向断言则只用于整个正则式的起始。
看到这里,又有疑问了,断言和泊点 ^
和 $
的用法不就一样了吗?是的!它们的用法很相似!只是要所用场景稍有不同,^
和 $
卡匹配串的首尾为字符串的头尾,而断言则卡匹配串的首尾须满足所给条件。
某些参考文献中将
lookahead assertion
翻译为 “正向预查”,正向与前向之辩无谓,但“预查”使用不当。预是预先的意思,预查很容易理解成预先查找,也就是先查找前向表达式,而后进行主匹配项查找。实际上这是不对的,lookahead assertion
不是预先进行的查找的,而是指在找到位于它前面的匹配项之后对接下来的元素进行断言,也就是看看满不满足我们的条件,其中的元素也不是查找的对象,而是用于判断匹配是否成功,并不进入要返回的匹配结果。</