[20] Le espressioni regolari del Perl sono DFA o NFA? Sono aderenti allo standard POSIX?
DFA NFA POSIX
Nonostante sia vero che le espressioni regolari del Perl assomiglino ai
DFA (Deterministic Finite Automata, Automa Deterministico a Stati Finiti)
del programma egrep(1), in pratica sono implementate come NFA
(Non-deterministic Finite Automata, Automa Non-deterministico a Stati
Finiti) per consentire il backtracking e il backreferencing (*). E non
sono nello stile di POSIX, perché queste garantiscono il
comportamento del caso peggiore in tutti i casi (sembra che qualcuno
preferisca garanzie di coerenza, anche quando ciò che viene
garantito è la lentezza). Consultate il libro "Mastering Regular
Expressions" [Padroneggiare le espressioni regolari, NdT] (O'Reilly) di
Jeffrey Friedl per tutti i dettagli che potete mai sperare di conoscere
sulla questione (il riferimento completo al libro si trova nella pagina
perlfaq2).
(*) NdT: il backreferencing è l'utilizzo di riferimenti a subpattern
usati in precedenza nella stessa espressione, come in /(d)1/.
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!