web-dev-qa-db-fra.com

Comment nier la regex entière?

J'ai un regex, par exemple (ma|(t){1}). Il correspond à ma et t et ne correspond pas à bla.

Je veux nier la regex, donc elle doit correspondre à bla et non pas ma et t, en ajoutant quelque chose à cette regex . Je sais que je peux écrire bla, la regex réelle est toutefois plus complexe.

76
IAdapter

Utiliser une recherche négative: (?!pattern)

Des lookarounds positifs peuvent être utilisés pour affirmer qu'un motif correspond. Les lookarounds négatifs sont le contraire: ils sont utilisés pour affirmer qu'un motif ne correspond pas. Certains arômes soutiennent des assertions; certains mettent des limites sur le lookbehind, etc.

Liens vers regular-expressions.info

Voir également

Plus d'exemples

Ce sont des tentatives pour trouver des solutions de regex aux problèmes de jouets sous forme d'exercices; ils doivent être instructifs si vous essayez d’apprendre les différentes manières d’utiliser les lookarounds (imbrication, utilisation, capture, etc.):

82
polygenelubricants

En supposant que vous souhaitiez uniquement interdire les chaînes qui correspondent complètement à l'expression rationnelle (c'est-à-dire que mmbla est correct, mais que mm ne l'est pas), voici ce que vous voulez:

^(?!(?:m{2}|t)$).*$

(?!(?:m{2}|t)$) est un négatif lookahead ; il dit "à partir de la position actuelle, les caractères suivants sont pasmm ou t, suivis de la fin de la chaîne." L'ancre de départ (^) au début garantit que le lookahead est appliqué au début de la chaîne. Si cela réussit, le .* continue et consomme la chaîne.

Pour votre information, si vous utilisez la méthode matches() de Java, vous n'avez pas vraiment besoin du ^ et du $ final, mais ils ne font pas de mal. Le $ à l'intérieur du lookahead est requis, cependant.

42
Alan Moore
\b(?=\w)(?!(ma|(t){1}))\b(\w*)

c'est pour la regex donnée.
le\b doit trouver la limite de Word.
le regard positif à venir (? =\w) est là pour éviter les espaces.
l’aspect négatif devant la regex originale est d’empêcher toute correspondance.
.__ et enfin le (\ w *) est d’attraper tous les mots qui restent.
le groupe qui contiendra les mots est le groupe 3.
le simple (?! pattern) ne fonctionnera pas car aucune sous-chaîne ne correspondra
le simple ^ (?! (?: m {2} | t) $). * $ ne fonctionnera pas car sa granularité est constituée de lignes pleines

0
Ofer Skulsky