我一直在研究正則表達式幾天特別與lookarounds。我無法理解這個不匹配包含「bar」的句子的正則表達式。請解釋我這個正則表達式
^(?!.*bar).*$
我不明白爲什麼使用.*bar
。如果有人能夠給我一個很好的解釋,這將有助於我lot.Thanks ....
我一直在研究正則表達式幾天特別與lookarounds。我無法理解這個不匹配包含「bar」的句子的正則表達式。請解釋我這個正則表達式
^(?!.*bar).*$
我不明白爲什麼使用.*bar
。如果有人能夠給我一個很好的解釋,這將有助於我lot.Thanks ....
負面看起來是一種失敗整個比賽的東西,如果它的內部匹配的話。
因此,如果在指定的位置(在您的示例中,^
指定在該行的開頭),則超前視圖中的模式匹配,整個匹配將失敗。
讓我們來看看,你有.*bar
。如果.*bar
匹配,則整個正則表達式失敗。
.*bar
什麼時候匹配?答案是它匹配只要有該行bar
:
bar
foo bar
foo bar baz
比方說,有沒有任何.*
。因此,您將在bar
處於負向預測。如果bar
只匹配,則整個匹配失敗。現在請記住,這個檢查是在開始。
bar
foo bar
foo bar baz
第一行是唯一一個匹配bar
的開始處。因此^(?!bar).*$
只會阻止一行開頭的匹配,但如果有bar
,則^(?!.*bar).*$
將阻止匹配中任何位置的匹配。
希望,這使得它更清楚一點:)
編輯:固定的例子
(?!.*bar)
是負先行意味着它會檢查,以確保*。酒吧不在線。
下面是如何使用負向前看符號(See it in action)的例子:
(?!GBP).*\d{3}.*
這可以確保匹配三位數,只有當他們沒有用術語「GBP」
之前正則表達式
^(?!.*bar).*$
NODE EXPLANATION -------------------------------------------------------------------------------- ^ the beginning of the string -------------------------------------------------------------------------------- (?! look ahead to see if there is not: -------------------------------------------------------------------------------- .* any character except \n (0 or more times (matching the most amount possible)) -------------------------------------------------------------------------------- bar 'bar' -------------------------------------------------------------------------------- ) end of look-ahead -------------------------------------------------------------------------------- .* any character except \n (0 or more times (matching the most amount possible)) -------------------------------------------------------------------------------- $ before an optional \n, and the end of the string
http://regex101.com/r/lF1gI7 – anubhava