Leçons du module (3/4)
Greedy vs lazy
Par défaut les quantificateurs sont gourmands (gourmands) : ils consomment le maximum
possible en gardant le modèle valide. En ajoutant ? après un
quantificateur (*?, +?, ??, {n,m}?) obtient la version paresseuse
(paresseux) : consommer le moins possible.
Sample: <b>uno</b> e <i>due</i>
Pattern greedy <.*> matcha: <b>uno</b> e <i>due</i> (tutto)
Pattern lazy <.*?> matcha: <b> </b>
<i> </i> (4 match con flag g)Exactement le même modèle, juste une différence de lettre (? ajouté à
quantificateur), des résultats totalement différents.
Quand c'est important
- Pour extraire le contenu entre délimiteurs (balises HTML, guillemets, parenthèses), la version paresseuse est presque toujours la bonne.
- Pour faire correspondre à la fin de la ligne, vous voulez généralement gourmand (
.*).
Stratégies gourmandes ou paresseuses dans le moteur
Un quantificateur glouton (greedy) consomme autant de texte que possible et ne renvoie que s'il est forcé. En ajoutant ? (lazy), le moteur consomme le strict minimum et avance d'un caractère à la fois à la recherche de la prochaine correspondance de modèle.
Essayez-le vous-même
Estrai ogni tag HTML del sample (es. `<b>`, `</b>`, `<i>`, `</i>`) usando la versione lazy `.*?`.
Afficher l'indice
Greedy <.*> matcha dall'inizio del primo tag fino alla fine dell'ultimo. Lazy <.*?> si ferma al primo > che incontra.
Solution disponible après 3 tentatives
Exercice de révision
Estrai ogni stringa tra apici doppi nel testo (es. "ciao", "mondo"). Usa la versione lazy del quantificatore per non saltare a chiusure successive.
Afficher l'indice
".*?" si ferma al primo apice doppio di chiusura.
Solution disponible après 3 tentatives
Défi supplémentaire
Estrai tutti i blocchi di testo racchiusi tra parentesi quadre (es. `[testo]`), comprese le parentesi, usando un quantificatore pigro per non unire blocchi separati.
Afficher l'indice
Usa \[ per la quadra aperta, poi .*? e infine \] per la quadra chiusa.
Solution disponible après 3 tentatives