765 votes

Comment nier mot spécifique dans une expression régulière ?

Je sais que je peux nier groupe de caractères comme dans [^ bar] mais j’ai besoin d’une expression régulière où la négation s’applique à mot spécifique - donc dans mon exemple comment annuler un réels « bar » et pas « n’importe quel caractères en bar »

899voto

Chris Van Opstal Points 16961

Une excellente façon de le faire consiste à utiliser la préanalyse négative:

68voto

Bryan Oakley Points 63365

À moins que les performances sont de la plus grande préoccupation, c’est souvent plus facile que d’exécuter vos résultats grâce à un second passage, en ignorant ceux qui correspondent à des mots que vous voulez pour réduire à néant.

Les expressions régulières signifient généralement que vous faites de script ou une sorte de tâche peu performant en tout cas, afin de trouver une solution qui soit facile à lire, facile à comprendre et facile à entretenir.

53voto

Gumbo Points 279147

Vous pouvez utiliser soit une anticipation négative ou look-behind:

Ou utiliser quelques notions de base :

Ces tous correspondant à rien qui ne contient pas de `` .

43voto

JAB Points 11053

L’expression régulière suivante va faire ce que vous voulez (tant que négatifs lookbehinds et préanalyses sont pris en charge), correspondance des choses correctement ; le seul problème est qu’elle correspond à des caractères individuels (c'est-à-dire chaque match est un caractère unique plutôt que tous les caractères entre deux consécutifs « bar », s), ce qui pourrait entraîner un risque de surcharge élevée si vous travaillez avec très longues chaînes.

33voto

Je suis tombé sur ce fil de discussion du forum, tout en essayant d'identifier une regex pour la suite de l'anglais déclaration:

Étant donné une chaîne d'entrée, d'un match tout sauf cette chaîne d'entrée est exactement 'bar'; par exemple: je veux correspondre à "barrière" et "interdirait" ainsi que "foo".

Voici la regex, je suis venu avec

^(bar.+|(?!bar).*)$

Ma traduction en anglais de l'expression régulière est "correspond à la chaîne si elle commence par" bar "et il a au moins un autre personnage, ou si la chaîne ne commence pas par "bar".

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