为什么反直觉?
/(?<!\d)\d{8}(?!\d)/
,此处(?<!\d)
首先,但称为 lookbehind ,(?!\d)
next ,但称为 lookahead 。一切都是反直觉的。
以这种方式命名是什么原因?
答案 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。