web-dev-qa-db-fra.com

Négation de chaînes à l'aide d'expressions régulières

Est-il possible de faire une négation de chaîne dans les expressions régulières? J'ai besoin de faire correspondre toutes les chaînes qui ne contiennent pas la chaîne "..". Je sais que vous pouvez utiliser ^[^\.]*$ pour faire correspondre toutes les chaînes qui ne contiennent pas "." mais je dois faire correspondre plusieurs caractères. Je sais que je pourrais simplement faire correspondre une chaîne contenant ".." puis annuler la valeur de retour de la correspondance pour obtenir le même résultat, mais je me demandais simplement si c'était possible.

34
Paul Bevis

Vous pouvez utiliser des anticipations négatives:

^(?!.*\.\.).*$

Cela fait que l'expression ne correspond pas si elle peut trouver une séquence de deux périodes n'importe où dans la chaîne.

42
chaos
^(?:(?!\.\.).)*$

ne correspondra que s'il n'y a pas deux points consécutifs dans la chaîne.

5
Tim Pietzcker