2014-01-29 67 views
1

在Ruby 2.0的正則表達式,我希望有人也許能夠解釋我的錯誤:正則表達式負面後視被忽略?

這種積極的外觀,背後是正確的:

"seacow hotdog".scan(/(?<=hot)(cow|dog)/) # => [["dog"]] 

這種負面向後看不起作用:

"seacow hotdog".scan(/(?<!=hot)(cow|dog)/) # => [["cow"], ["dog"]] - INCORRECT 

爲什麼?

回答

3
"seacow hotdog".scan(/(?<!=hot)(cow|dog)/) 
         ^

你有一個=標誌,不應該存在......

"seacow hotdog".scan(/(?<!hot)(cow|dog)/) 

您正在尋找=hot爲文字字符串...

用於演示

http://rubular.com/r/Oaa8ToL8jN
+0

關於'?<!':「'(?<!pat)'的文檔非常清晰 - 負向後置斷言:確保前面的字符不匹配pat,但不包括那些匹配文字中的字符「 –

+0

謝謝。非常感激。 – Ross

+0

@Ross - 很高興聽到它。你需要其他什麼,或者這是否回答你的問題? – Floris