[12] Cosa significa che un'espressione regolare è avida (greedy)? Come posso evitarlo?
greedy avida
La maggior parte delle persone pensano che le espressioni regolari avide
effettuino più match possibili. Tecnicamente parlando, sono
effettivamente i quantificatori (?, *, +, {}) ad essere avidi,
piuttosto che l'intero pattern; il Perl preferisce un'avidità locale e
un'immediata gratificazione rispetto ad una avidità generale.
Per ottenere versioni non avide degli stessi quantificatori,
usate (??, *?, +?, {}?).
Un esempio:
$s1 = $s2 = "Ho molto molto freddo";
$s1 =~ s/mo.*o //; # Ho freddo
$s2 =~ s/mo.*?o //; # Ho molto freddo
Notate come la seconda sostituzione abbia fermato il match non appena
ha trovato "o ". Il quantificatore *? in realtà dice al
motore delle espressioni regolari di trovare una corrispondenza il
più presto possibile e di passare il controllo a qualsiasi cosa
si trovi nella linea che segue, come fareste se steste giocando con una
patata bollente.
Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan
Torkington. Tutti i diritti riservati.
Questa documentazione è libera; puoi ridistribuirla e/o
modificarla secondo gli stessi termini applicati al Perl.
Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di
codice in questo file sono rilasciati al pubblico dominio. Potete, e
siete incoraggiati a farlo, utilizzare il presente codice o qualunque
forma derivata da esso nei vostri programmi per divertimento o per profitto.
Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese
ma non è obbligatorio.
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per
porre quesiti di tipo tecnico, per rimanere aggiornato su meeting,
incontri, manifestazioni e novità su Perl.it. Iscriviti!