Lektionen des Moduls (3/4)
Greedy vs. Lazy
Standardmäßig sind Quantoren gierig (gierig): Sie verbrauchen das Maximum
möglich, wobei das Muster gültig bleibt. Durch Hinzufügen von ? nach a
Quantifizierer (*?, +?, ??, {n,m}?) erhalten lazy Version
(faul): so wenig wie möglich konsumieren.
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)Genau das gleiche Muster, nur ein Buchstabe Unterschied (? hinzugefügt
Quantor), völlig unterschiedliche Ergebnisse.
Wenn es darauf ankommt
- Um Inhalte zwischen Trennzeichen zu extrahieren (HTML-Tags, Anführungszeichen, Klammern) ist die faule Version fast immer die richtige.
- Um zum Zeilenende zu passen, benötigen Sie normalerweise Greedy (
.*).
Gierige vs. faule Strategien in der Engine
Ein gieriger Quantifizierer (greedy) verbraucht so viel Text wie möglich und gibt nur zurück, wenn er erzwungen wird. Durch das Hinzufügen von ? (lazy) verbraucht die Engine das Nötigste und rückt ein Zeichen nach dem anderen vor, um nach der nächsten Musterübereinstimmung zu suchen.
Probieren Sie es selbst aus
Estrai ogni tag HTML del sample (es. `<b>`, `</b>`, `<i>`, `</i>`) usando la versione lazy `.*?`.
Hinweis anzeigen
Greedy <.*> matcha dall'inizio del primo tag fino alla fine dell'ultimo. Lazy <.*?> si ferma al primo > che incontra.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Estrai ogni stringa tra apici doppi nel testo (es. "ciao", "mondo"). Usa la versione lazy del quantificatore per non saltare a chiusure successive.
Hinweis anzeigen
".*?" si ferma al primo apice doppio di chiusura.
Lösung nach 3 Versuchen verfügbar
Zusätzliche Herausforderung
Estrai tutti i blocchi di testo racchiusi tra parentesi quadre (es. `[testo]`), comprese le parentesi, usando un quantificatore pigro per non unire blocchi separati.
Hinweis anzeigen
Usa \[ per la quadra aperta, poi .*? e infine \] per la quadra chiusa.
Lösung nach 3 Versuchen verfügbar