它爲什麼反直覺?命名爲正則表達式,向前看和向後看
/(?<!\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