J'ai besoin d'un regex (sera utilisé dans le routage ZF2, je crois qu'il utilise le preg_match de php) qui correspond à tout sauf une chaîne spécifique.
Par exemple: je dois faire correspondre n'importe quoi sauf "rouge", "vert" ou "bleu".
J'ai actuellement la regex:
^(?!red|green|blue).*$
test -> match (correct)
testred -> match (correct)
red -> doesn't match (correct)
redtest -> doesn't match (incorrect)
Dans le dernier cas, l'expression régulière ne se comporte pas comme je le souhaite. Il doit correspondre à "redtest" car "redtest" ne l'est pas ("rouge", "vert" ou "bleu").
Des idées sur la façon de réparer la regex?
Vous pouvez inclure la fin de l'ancre de chaîne dans le préfixe
^(?!(red|blue|green)$)
Peut-être que cette regex peut vous aider:
^(?!red|green|blue)(.+)|(.+)(?<!red|green|blue)$
Découvrez ceci à Rubular .
Une expression rationnelle comme celle-ci inclut la condition du second bloc - YOUR_REGEXP, et exclut la condition du premier bloc. Dans ce cas, si votre chaîne contient red, green ou blue result always serait false
'(?si)(?!.*(red|green|blue).*)(.*(YOUR_REGEXP).*)'