Recherche…


Syntaxe

  • Regard positif: (?=pattern)
  • Lookahead négatif: (?!pattern)
  • Lookbehind positif : (?<=pattern)
  • Lookbehind négatif : (?<!pattern)

Remarques

Non pris en charge par tous les moteurs regex.

En outre, de nombreux moteurs de regex limitent les modèles à l'intérieur des styles à des chaînes de longueur fixe. Par exemple, le modèle (?<=a+)b doit correspondre au b dans aaab mais génère une erreur dans Python.

Les groupes de capture sont autorisés et fonctionnent comme prévu, y compris les références arrière. Le lookahead / lookbehind lui-même n'est pas un groupe de capture, cependant.

Les bases

Un lookahead positif (?=123) affirme que le texte est suivi par le motif donné, sans inclure le motif dans la correspondance. De même, un lookbehind positif (?<=123) affirme que le texte est précédé du motif donné. Remplacer le = avec ! nie l'assertion.


Entrée : 123456

  • 123(?=456) correspond à 123 ( résultat positif )
  • (?<=123)456 correspond à 456 ( lookbehind positif )
  • 123(?!456) échoue ( tête de lecture négative )
  • (?<!123)456 échoue ( lookbehind négatif )

Entrée : 456

  • 123(?=456) échoue
  • (?<=123)456 échoue
  • 123(?!456) échoue
  • (?<!123)456 correspondances 456

Utiliser lookbehind pour tester les fins

Un lookbehind peut être utilisé à la fin d'un pattern pour s'assurer qu'il se termine ou non d'une certaine manière.

([az ]+|[AZ ]+)(?<! ) correspond uniquement aux séquences de mots minuscules ou uniquement de mots en majuscule tout en excluant les espaces de fin.

Simulation d'une longueur variable avec \ K

Certaines versions de regex (Perl, PCRE, Oniguruma, Boost) ne supportent que les lookbehinds de longueur fixe, mais offrent la fonctionnalité \K , qui peut être utilisée pour simuler une apparence de longueur variable au début d'un motif. En rencontrant un \K , le texte correspondant jusqu'à ce point est ignoré et seul le texte correspondant à la partie du motif suivant \K est conservé dans le résultat final.

ab+\Kc

Est équivalent à:

(?<=ab+)c

En général, un motif de la forme:

(subpattern A)\K(subpattern B)

Finit par être similaire à:

(?<=subpattern A)(subpattern B)

Sauf si le sous-modèle B peut correspondre au même texte que le sous-modèle A - vous pourriez vous retrouver avec des résultats subtilement différents, car le sous-modèle A consomme toujours le texte, contrairement à un vrai lookback.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow