Lekcje modułu (3/4)
Greedy vs. lazy
Domyślnie kwantyfikatory są chciwe (chciwe): zużywają maksimum
możliwe utrzymanie ważności wzoru. Dodając ? po a
kwantyfikator (*?, +?, ??, {n,m}?) pobierz wersję leniwą
(leniwy): spożywaj jak najmniej.
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)Dokładnie ten sam wzór, tylko różnica jednej litery (dodano ?
kwantyfikator), zupełnie inne wyniki.
Kiedy ma to znaczenie
- Aby wyodrębnić treść pomiędzy ogranicznikami (tagi HTML, cudzysłowy, nawiasach) wersja leniwa jest prawie zawsze właściwa.
- Aby dopasować do końca linii, zwykle potrzebujesz zachłanności (
.*).
Strategie Chciwy i Leniwy w silniku
Zachłanny kwantyfikator (greedy) zużywa jak najwięcej tekstu i zwraca tylko wtedy, gdy jest wymuszony. Dodając ? (lazy), silnik zużywa absolutne minimum i przesuwa się o jeden znak na raz, szukając następnego dopasowania wzorca.
Spróbuj sam
Estrai ogni tag HTML del sample (es. `<b>`, `</b>`, `<i>`, `</i>`) usando la versione lazy `.*?`.
Pokaż wskazówkę
Greedy <.*> matcha dall'inizio del primo tag fino alla fine dell'ultimo. Lazy <.*?> si ferma al primo > che incontra.
Rozwiązanie dostępne po 3 próbach
Przejrzyj ćwiczenie
Estrai ogni stringa tra apici doppi nel testo (es. "ciao", "mondo"). Usa la versione lazy del quantificatore per non saltare a chiusure successive.
Pokaż wskazówkę
".*?" si ferma al primo apice doppio di chiusura.
Rozwiązanie dostępne po 3 próbach
Dodatkowe wyzwanie
Estrai tutti i blocchi di testo racchiusi tra parentesi quadre (es. `[testo]`), comprese le parentesi, usando un quantificatore pigro per non unire blocchi separati.
Pokaż wskazówkę
Usa \[ per la quadra aperta, poi .*? e infine \] per la quadra chiusa.
Rozwiązanie dostępne po 3 próbach