正则表达式,前瞻和后瞻的命名约定

时间:2010-03-25 09:09:54

标签: regex naming-conventions regex-lookarounds lookahead lookbehind

为什么反直觉?

/(?<!\d)\d{8}(?!\d)/,此处(?<!\d) 首先,但称为 lookbehind (?!\d) next ,但称为 lookahead 。一切都是反直觉的。

以这种方式命名是什么原因?

4 个答案:

答案 0 :(得分:3)

因为正则表达式引擎从头到尾消耗字符。所以“前方”是朝向字符串的末尾,而“后方”则是朝向开始。

    ...xyz12345678abc...
behind --->---------- ahead

(?!\d)是在\d{8}之后有一个十进制数的断言,因此正则表达式引擎需要检查字符串末尾方向的字符,即先行即可。

类似于后视。

答案 1 :(得分:3)

它们的命名取决于它们的作用,而不是您在该特定表达中如何使用它。

lookbehind正在寻找当前位置后面(左边)的字符串匹配。

前瞻是在当前位置之前(右侧)的字符串中寻找匹配。

答案 2 :(得分:1)

这是违反直觉的,因为没有共识是时间从前到后还是从前到后,你只是有不同的心态。

在英语中我们说“将过去抛在后面”,但“过去”是“之前”(前=前)。

答案 3 :(得分:0)

这很简单,真的。

ab

现在从左到右阅读字符。

a落后b;
b提前a


那就是说,你是对的,这些相对主义可能会令人困惑。例如,在艾马兰文化中,the future is behind; the past is ahead