Saltar al contenido principal
eLearner.app
Módulo 2 · Lección 3 de 47/32 en el curso~10 min
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.

Code
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

Ejercicio#regex.m2.l3.e1
Intentos: 0Cargando...

Estrai ogni tag HTML del sample (es. `<b>`, `</b>`, `<i>`, `</i>`) usando la versione lazy `.*?`.

Cargando editor...
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

Ejercicio#regex.m2.l3.e2
Intentos: 0Cargando...

Estrai ogni stringa tra apici doppi nel testo (es. "ciao", "mondo"). Usa la versione lazy del quantificatore per non saltare a chiusure successive.

Cargando editor...
Mostrar pista

".*?" si ferma al primo apice doppio di chiusura.

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#regex.m2.l3.e3
Intentos: 0Cargando...

Estrai tutti i blocchi di testo racchiusi tra parentesi quadre (es. `[testo]`), comprese le parentesi, usando un quantificatore pigro per non unire blocchi separati.

Cargando editor...
Mostrar pista

Usa \[ per la quadra aperta, poi .*? e infine \] per la quadra chiusa.

Solución disponible después de 3 intentos