为什么它是反直觉的?
/(?<!\d)\d{8}(?!\d)/
,这里先(?<!\d)
来,但叫lookbehind,next,但叫lookahead。所有这些都是反直觉的。(?!\d)
以这种方式命名它的原因是什么?
为什么它是反直觉的?
/(?<!\d)\d{8}(?!\d)/
,这里先(?<!\d)
来,但叫lookbehind,next,但叫lookahead。所有这些都是反直觉的。(?!\d)
以这种方式命名它的原因是什么?
因为正则表达式引擎从头到尾消耗字符。所以“前面”是在字符串的末尾,“后面”是在开头。
...xyz12345678abc...
behind --->---------- ahead
是(?!\d)
断言后面有一个十进制数\d{8}
,因此正则表达式引擎需要检查字符串末尾方向的字符,即前瞻。
类似于后视。
它们是根据它们的作用命名的,而不是您在特定表达式中碰巧使用它的方式。
向后查找是在当前位置后面(左侧)的字符串中寻找匹配项。
前瞻是在当前位置前面(右侧)的字符串中寻找匹配项。
这是违反直觉的,因为对于时间是从前到后还是从后到前没有共识,你只是有不同的心态。
在英语中,我们说“Leave the past behind ”,但“past”是发生在“ before ”(fore = front)的事情。