Lecciones del módulo (3/4)
Greedy vs lazy
Por defecto los cuantificadores son codiciosos (codiciosos): consumen el máximo
posible manteniendo el patrón válido. Al agregar ? después de un
cuantificador (*?, +?, ??, {n,m}?) obtiene la versión lazy
(perezoso): consume lo menos posible.
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)Exactamente el mismo patrón, solo una letra de diferencia (? agregada a
cuantificador), resultados totalmente diferentes.
Cuando importa
- Para extraer contenido entre delimitadores (etiquetas HTML, comillas, paréntesis) la versión lazy casi siempre es la correcta.
- Para hacer coincidir hasta el final de la línea, generalmente desea codicioso (
.*).
Estrategias codiciosas vs perezosas en el motor
Un cuantificador codicioso (greedy) consume tanto texto como sea posible y regresa solo si es forzado. Al agregar ? (lazy), el motor consume el mínimo indispensable y avanza un carácter a la vez buscando la siguiente coincidencia de patrón.
Pruébalo tú mismo
Estrai ogni tag HTML del sample (es. `<b>`, `</b>`, `<i>`, `</i>`) usando la versione lazy `.*?`.
Mostrar pista
Greedy <.*> matcha dall'inizio del primo tag fino alla fine dell'ultimo. Lazy <.*?> si ferma al primo > che incontra.
Solución disponible después de 3 intentos
Ejercicio de revisión
Estrai ogni stringa tra apici doppi nel testo (es. "ciao", "mondo"). Usa la versione lazy del quantificatore per non saltare a chiusure successive.
Mostrar pista
".*?" si ferma al primo apice doppio di chiusura.
Solución disponible después de 3 intentos
Desafío adicional
Estrai tutti i blocchi di testo racchiusi tra parentesi quadre (es. `[testo]`), comprese le parentesi, usando un quantificatore pigro per non unire blocchi separati.
Mostrar pista
Usa \[ per la quadra aperta, poi .*? e infine \] per la quadra chiusa.
Solución disponible después de 3 intentos