négation de chaîne en utilisant des expressions régulières
-
18-09-2019 - |
Question
Est-il possible de faire la négation de la chaîne dans les expressions régulières? Je dois 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 simplement correspondre à une chaîne contenant ".."
puis nier la valeur de retour du match pour obtenir le même résultat, mais je me demandais s'il était possible.
La solution
Vous pouvez utiliser lookaheads négatif:
^(?!.*\.\.).*$
Cela provoque l'expression correspondant pas si elle peut trouver une séquence de deux périodes ne importe où dans la chaîne.
Autres conseils
^(?:(?!\.\.).)*$
ne correspondra s'il n'y a pas deux points consécutifs partout dans la chaîne.