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 »
Réponses
Trop de publicités?Une excellente façon de le faire consiste à utiliser la préanalyse négative:
À 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.
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 `` .
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.
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".