404 votes

Une expression régulière pour exclure un mot/string

J'ai une expression régulière comme suit:

^/[a-z0-9]+$

Cela correspond à des chaînes telles que /hello ou /hello123.

Toutefois, je tiens à exclure un couple de la chaîne de valeurs telles que l' /ignoreme et /ignoreme2.

J'ai essayé quelques variantes, mais ne pouvez pas sembler obtenir pour travailler!

Ma dernière tentative a été faible

^/(((?!ignoreme)|(?!ignoreme2))[a-z0-9])+$

Toute aide serait grandement appréciée :-)

488voto

Seth Points 18568

Voici encore une autre façon: (à l'aide d'un négatif "look-ahead"):

^/(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$ 

Remarque: Il n'y a qu'une seule capture d'expression: ([a-z0-9]+).

53voto

Alix Axel Points 63455

Cela devrait le faire:

^/\b([a-z0-9]+)\b(?<!ignoreme|ignoreme2|ignoreme3)

Vous pouvez ajouter autant de mots que vous le souhaitez, voici un exemple simple d'implémentation PHP:

$ignoredWords = array('ignoreme', 'ignoreme2', 'ignoreme...');

preg_match('~^/\b([a-z0-9]+)\b(?<!' . implode('|', array_map('preg_quote', $ignoredWords)) . ')~i', $string);

25voto

Gumbo Points 279147

Que vous voulez exclure les deux mots, vous avez besoin d'une conjonction:

^/(?!ignoreme$)(?!ignoreme2$)[a-z0-9]+$

Maintenant, les deux conditions doivent être remplies (ni ignoreme ni ignoreme2 est autorisé) pour avoir un match.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X