I quantificatori greedy e lazy

Quando si utilizzano i quantificatori nelle espressioni regolari, bisogna ricordarsi che ne esistono due versioni: greedy e lazy ( o non greedy ).

Quantificatore greedy

Il quantificatore greedy trova la corrispondenza con il maggior numero di occorrenze.

Generalmente, nella regex tutti i quantificatori sono greedy di default.mente, tutti i quantificatori sono greedy di default.

  • *
  • +
  • ?
  • {n,m}

Un esempio pratico

Nel seguente esempio provo a selezionare i tag html del documento tramite l'espressione <.+>

un esempio di ricerca greedy

Tuttavia, la regex in versione "greedy" seleziona tutto ciò che trova tra il primo tag di apertura e l'ultimo tag di chiusura >.

Nota. Non a caso la traduzione letterale di greedy è avido o ingordo.

Quantificatore lazy

Il quantificatore lazy ( o non greedy ) seleziona la corrispondenza con il minore numero di occorrenze possibili.

In un'espressione regolare per utilizzare i quantificatori nella versione lazy si aggiunge il simbolo del punto interrogativo dopo il quantificatore.

  • *?
  • +?
  • ??
  • {n,m}?

Esempio

Provo a selezionare i tag html del documento rendendo pigro il quantificatore jolly <.?>

un esempio di quantificatore lazy

In questo caso, la regex in versione "lazy" ha selezionato diverse occorrenze del testo, più piccole della precedente.

Nota. La traduzione letterale di lazy è pigro.

La differenza tra greedy e lazy

Il più delle volte i quantificatori greedy e lazy estraggono le stesse corrispondenze.

Tuttavia, nel caso del quantificatore jolly (.) diventa molto più marcata e importante.

Nel quantificatore greedy ( avida ) la ricerca del simbolo di chiusura delle occorrenze avviene all'indietro a partire dalla fine tramite un processo di backtracking.

un esempio di ricerca greedy con backtracking e lazy con forward tracking

Viceversa, nel quantificatore lazy ( pigro ) la ricerca avviene in avanti tramite un processo di forward tracking.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base
  1. I quantificatori
  2. La ricerca greedy o lazy
  3. I gruppi
  4. I gruppi passivi
  5. La backreference
  6. La selezione alternativa