web-dev-qa-db-ja.com

正規表現-特定の文字列を除くすべてに一致

特定の文字列以外のすべてに一致する正規表現(ZF2ルーティングで使用されます。phpのpreg_matchを使用すると思います)が必要です。

例:「赤」、「緑」、「青」以外のすべてと一致させる必要があります。

私は現在正規表現を持っています:

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

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

最後のケースでは、正規表現が思ったように動作しません。 「redtest」は(「red」、「green」、「blue」)ではないため、「redtest」と一致する必要があります。

正規表現を修正する方法のアイデアはありますか?

12
rafaame

文字列アンカーの終わりを先読みに含めることができます

 ^(?!(red|blue|green)$)
10
Explosion Pills

おそらく、この正規表現はあなたを助けることができます:

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

Rubular で確認してください。

2
NeverHopeless

このような正規表現には、2番目のブロックの条件が含まれます-YOUR_REGEXP、最初のブロックの条件が除外されます。この場合、文字列にredgreenまたはblue結果alwaysになるfalse

'(?si)(?!.*(red|green|blue).*)(.*(YOUR_REGEXP).*)'
0
Dante