Négation de Regex?

je joue au golf Regex (http://regex.alf.nu/) et je fais le trou Abba. J'ai la suite de l'expression rationnelle qui correspond le mauvais côté entièrement (c'est ce que j'essayais de faire):

(([w])([w]))

cependant, j'essaie de le nier maintenant pour qu'il corresponde à l'autre côté. Je n'arrive pas à comprendre cette partie. J'ai essayé:

(?!([w])([w]))

Mais cela ne fonctionne pas. Des conseils des maîtres du regex?

16
demandé sur Lester Peabody 2013-12-25 19:47:39

3 réponses

Vous pouvez faire beaucoup plus court (et obtenir plus de points) en utilisant simplement . et en supprimant les parenthèses:

^(?!.*(.)(.))

il s'assure juste qu'il n'y a pas de "abba" ("abba" signifie ici 4 lettres dans cet ordre particulier que nous ne voulons pas faire correspondre) dans n'importe quelle partie de la chaîne sans avoir à faire correspondre le mot entier.

23
répondu Jerry 2013-12-25 16:35:23

à l'Aide de l'explication ici: https://stackoverflow.com/a/406408/584663

j'ai trouvé:^((?!((\w)(\w))).)*$

2
répondu Bill 2017-05-23 11:53:13

La clé ici s'avère être le premier signe^, et le .*

(?! ...) est une construction à long terme, et donc ne fait pas avancer le moteur de traitement regex.

/ (?! ...)/ sur son propre renvoie correctement un résultat négatif pour les éléments correspondant à l'expression à l'intérieur; mais pour les éléments qui ne correspondent pas (...) le moteur regex poursuit son traitement. Cependant, si votre regex ne contient que le (?! ) il n'y a plus rien à traiter et le traitement des regex poste jamais de progrès. (Voir cette grande réponse).

apparemment puisque le regex restant est vide, il correspond à n'importe quel segment de largeur zéro d'une corde, c.-à-d. qu'il correspond à n'importe quelle corde.

[begin SWAG]

avec le caret ^ présent, le moteur regex est capable de reconnaître que vous êtes à la recherche d'une vraie réponse et que vous ne voulez pas qu'il vous dise que la chaîne contient des composants de largeur zéro.

[end SWAG]

ainsi il est capable de ne pas correspondre correctement lorsque le (?! ) réussir.

2
répondu inquist 2017-05-23 12:09:08