Passer au contenu principal
eLearner.app
Module 6 · Leçon 1 sur 421/32 dans le cours~10 min
Leçons du module (1/4)

Lookahead positif : `(?=...)`

Une anticipation positive (?=...) est une assertion de largeur nulle : vérifie qu'après la position actuelle, il suit un certain modèle, mais pas consommer ces personnages.

Code
Pattern: \d+(?= euro)
Sample:  Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
                ^^^                 ^^

La recherche anticipée (?= euro) nécessite euro après les chiffres, mais le la correspondance inclut uniquement les chiffres. 75 dollari ne correspond pas (euro est manquant).

Pourquoi "largeur nulle"

Considérez l'anticipation comme une condition sur l'emplacement, et non comme un morceau du match :

  • Le match s'arrête avant le lookahead.
  • La position « après le match » est le début du texte regardé par le lookahead.
  • La prochaine tentative de match avec le drapeau g commencera à partir de là.

Cela le rend parfait pour extraire des valeurs sans contexte : les prix sans monnaie, mots avant la ponctuation, etc.

Caractéristiques de l'anticipation et du progrès nul

L'anticipation positive (?=...) garantit que le modèle spécifié suit le point actuel, mais l'analyse du texte recommence à partir de la position précédant l'anticipation. Cela évite la « consommation » de parties du texte qui pourraient être utilisées pour des correspondances ultérieures.

Essayez-le vous-même

Exercice#regex.m6.l1.e1
Tentatives : 0Chargement…

Estrai SOLO le cifre dei prezzi in euro (le sequenze di numeri seguite da ' euro'). Niente valuta nel match.

Chargement de l'éditeur…
Afficher l'indice

Sposta ' euro' dentro un lookahead (?= euro): la stringa non sara' parte del match.

Solution disponible après 3 tentatives

Exercice de révision

Exercice#regex.m6.l1.e2
Tentatives : 0Chargement…

Trova ogni parola immediatamente seguita da due punti `:` (ma senza includere i due punti nel match).

Chargement de l'éditeur…
Afficher l'indice

Stessa logica: il `:` non e' nel match, ma e' una condizione di posizione.

Solution disponible après 3 tentatives

Défi supplémentaire

Exercice#regex.m6.l1.e3
Tentatives : 0Chargement…

Trova ogni nome di parola (es. nome di funzione) seguito immediatamente da una parentesi tonda aperta `(`, escludendo la parentesi dal match.

Chargement de l'éditeur…
Afficher l'indice

Sposta \( (parentesi tonda aperta escapata) all'interno del lookahead positivo (?=...).

Solution disponible après 3 tentatives