web-dev-qa-db-fra.com

Une expression régulière pour exclure un mot / une chaîne

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

^/[a-z0-9]+$

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

Cependant, j'aimerais qu'il exclue quelques valeurs de chaîne telles que /ignoreme et /ignoreme2.

J'ai essayé quelques variantes mais n'arrive pas à en faire fonctionner!

Ma dernière petite tentative a été

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

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

251
romiem

Voici encore un autre moyen (en utilisant un look-ahead négatif ):

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

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

321
Seth

Cela devrait le faire:

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

Vous pouvez ajouter autant de mots ignorés que vous le souhaitez, voici une implémentation simple de PHP:

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

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

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

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

Maintenant, les deux conditions doivent être vraies (ni ignoreme ni ignoreme2 n'est autorisé) pour avoir une correspondance.

17
Gumbo