255 votes

Regex pour les chaînes ne se terminant pas par un suffixe donné

Je n'ai pas été capable de trouver une regex appropriée pour correspondre à n'importe quelle chaîne de caractères. no se terminant par une certaine condition. Par exemple, je ne veux pas correspondre à tout ce qui se termine par un a .

Cela correspond

b
ab
1

Cela ne correspond pas

a
ba

Je sais que la regex devrait se terminer par $ pour marquer la fin, bien que je ne sache pas ce qui devrait la précéder.

Editar : La question originale ne semble pas être un exemple légitime pour mon cas. Donc : comment gérer plus d'un personnage ? Disons que tout ce qui ne se termine pas par ab ?

J'ai réussi à résoudre ce problème en utilisant ce fil :

.*(?:(?!ab).).$

L'inconvénient de cette méthode est qu'elle ne correspond pas à une chaîne d'un seul caractère.

350voto

stema Points 36113

Vous ne nous donnez pas la langue, mais si votre saveur regex supporte regardez derrière l'affirmation c'est ce dont vous avez besoin :

.*(?<!a)$

(?<!a) est une assertion lookbehind niée qui garantit qu'avant la fin de la chaîne (ou de la rangée avec m ), il n'y a pas le caractère "a".

Voir ici sur Regexr

Vous pouvez aussi facilement l'étendre à d'autres caractères, puisque cette vérification concerne la chaîne de caractères et n'est pas une classe de caractères.

.*(?<!ab)$

Cela correspondrait à tout ce qui ne se termine pas par "ab", voir sur Regexr

100voto

Doorknob Points 23912

Utilisez le no ( ^ ) symbole :

.*[^a]$

Si vous mettez le ^ au début des parenthèses, cela signifie "tout sauf ce qui est entre parenthèses". $ est simplement un point d'ancrage vers la fin.

Pour les caractères multiples il suffit de les mettre dans leur propre jeu de caractères :

.*[^a][^b]$

67voto

FiveO Points 1379

Pour rechercher les fichiers ne se terminant pas par ".tmp", nous utilisons la regex suivante :

^(?!.*[.]tmp$).*$

Testé avec le Testeur de Regex donne le résultat suivant :

enter image description here

9voto

Kent Points 71470
.*[^a]$

la regex ci-dessus correspondra aux chaînes qui ne se terminent pas par a .

6voto

JesperE Points 34356

Essayez ceci

/.*[^a]$/

El [] désigne une classe de caractères, et le ^ inverse la classe de caractères pour correspondre à tout sauf à un a .

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