1

为什么它是反直觉的?

/(?<!\d)\d{8}(?!\d)/,这里(?<!\d)来,但叫lookbehindnext,但叫lookahead。所有这些都是反直觉的。(?!\d)

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

4

4 回答 4

3

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

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

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

类似于后视。

于 2010-03-25T09:16:29.867 回答
3

它们是根据它们的作用命名的,而不是您在特定表达式中碰巧使用它的方式。

向后查找是在当前位置后面(左侧)的字符串中寻找匹配项。

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

于 2010-03-25T09:18:13.577 回答
1

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

在英语中,我们说“Leave the past behind ”,但“past”是发生在“ before ”(fore = front)的事情。

于 2010-03-25T09:22:59.893 回答
0

这很简单,真的。

ab

现在从左到右阅读字符。

a落后b;
b领先于a


也就是说,你是对的,这些相对主义可能会令人困惑。例如,在艾玛拉文化中,未来已经落后;过去就在眼前

于 2010-03-25T09:20:35.317 回答