它为什么反直觉?命名为正则表达式,向前看和向后看
/(?<!\d)\d{8}(?!\d)/
,这里(?<!\d)
来第一,而是叫回顾后,(?!\d)
下一个,而是叫先行。所有的直觉。
这样命名的理由是什么?
它为什么反直觉?命名为正则表达式,向前看和向后看
/(?<!\d)\d{8}(?!\d)/
,这里(?<!\d)
来第一,而是叫回顾后,(?!\d)
下一个,而是叫先行。所有的直觉。
这样命名的理由是什么?
这是违反直觉的,因为没有共识,无论时间是从前到后还是从后到前,而你只是有着不同的思维方式。
在英语中,我们说“离开背后过去”,但“过去”是发生的事情“以前”(前=前)。
因为正则表达式引擎会从头到尾使用字符。所以,“前方”是朝着弦的尽头,而“后面”是朝着起点。
...xyz12345678abc...
behind --->---------- ahead
的(?!\d)
是断言存在\d{8}
之后,是十进制数,因此正则表达式引擎需要在方向检查字符的字符串的结束,即先行。
类似的后视。
对不起,但这似乎并没有解释为什么它必须是这样的? – user198729 2010-03-25 09:27:31
@user:因为你不会倒退。 (http://en.wikipedia.org/wiki/Backward_running) – kennytm 2010-03-25 09:41:48
但是为什么正则表达式在这种情况下选择向后走?是否有一些好处? – user198729 2010-03-25 09:44:55
他们是根据他们的所作所为命名的,而不是你在特定表达中如何使用它。
lookbehind在当前位置后面(在左边)寻找匹配字符串。
该向前查找字符串在当前位置之前(右侧)的字符串中匹配。
这很简单,真的。
ab
现在阅读从左到右的字符。
a
落后于b
;
b
领先的a
这就是说,你是正确的,这些类型的相对主义可能会造成混淆。例如,在Aymaran文化中,the future is behind; the past is ahead。
这是最可以接受的答案!谢谢! – user198729 2010-03-25 09:31:14
但以这种方式命名它仍然很奇怪 – user198729 2010-03-25 09:33:51