Négation de chaîne en utilisant des expressions régulières

est-il possible de faire la négation de chaîne dans des expressions régulières? J'ai besoin de correspondre à toutes les chaînes qui ne contiennent pas la chaîne "..". Je sais que vous pouvez utiliser ^[^.]*$ pour correspondre à toutes les chaînes qui ne contiennent pas "." mais je dois correspondre à plus d'un caractère. Je sais que je pourrais tout simplement correspondre à une chaîne de caractères contenant ".." puis nier la valeur de retour du match pour obtenir le même résultat mais je me demandais si c'était possible.

35
demandé sur chaos 2009-07-20 18:15:43

2 réponses

Vous pouvez utiliser des lookheads négatifs:

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

qui 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
répondu chaos 2009-07-20 14:17:09
^(?:(?!\.\.).)*$

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

5
répondu Tim Pietzcker 2009-07-20 14:21:25