2013-06-05 80 views
11

我需要一個正則表達式(將用於ZF2路由,我相信它使用了php的preg_match),它匹配除特定字符串以外的任何內容。正則表達式 - 匹配除特定字符串以外的任何內容

例如:我需要匹配除「紅色」,「綠色」或「藍色」以外的任何內容。

我目前擁有的正則表達式:

^(?!red|green|blue).*$ 

test -> match (correct) 
testred -> match (correct) 
red -> doesn't match (correct) 
redtest -> doesn't match (incorrect) 

在最後一種情況下,正則表達式是不是表現得像個我想要的。它應該匹配「紅色」,因爲「紅色」不是(「紅色」,「綠色」或「藍色」)。

任何想法如何解決正則表達式?

回答

11

可以包括串錨月底在先行

^(?!(red|blue|green)$) 
+0

此正則表達式匹配的是什麼。你測試過了嗎? – rafaame

+0

@rafaame yup;匹配測試,測試和redtest,但不是紅色http://rubular.com/r/b9eMsVln1W –

+0

@rafaame可能嘗試添加'。*'在最後如果你需要實際捕獲字符串 –

2

也許這正則表達式可以幫助你:

^(?!red|green|blue)(.+)|(.+)(?<!red|green|blue)$ 

看看這個在Rubular

0

像這樣的正則表達式包含第二個塊的條件 - YOUR_REGEXP,並排除第一個塊的條件。在這種情況下,如果你的字符串將包含綠色藍色結果總是

'(?si)(?!.*(red|green|blue).*)(.*(YOUR_REGEXP).*)' 
相關問題