Dopo aver letto this article su due diversi tipi di algoritmi di espressioni regolari (Perl 5.8.7 e Thompson NFA), quest'ultimo è ~ 1.000.000 volte più veloce del primo, secondo l'articolo. Uso PHP giornalmente e uso regex parecchio, quindi volevo sapere quale algoritmo utilizza PHP.Quale algoritmo di espressione regolare utilizza PHP?
Ho trovato this question, tuttavia è solo per JavaScript. Una delle risposte afferma che JavaScript utilizza l'algoritmo NFA Thompson, ma che ovviamente varierà dall'implementazione all'implementazione. Penso che PHP potrebbe essere passato a utilizzare gli algoritmi più veloci quando è passato al set di funzioni PCRE
, deprecando il roba ereg_*
.
Ho guardato il PHP PCRE documentation e, per quanto ho potuto vedere, non mi dice nulla su quale algoritmo utilizza. L'acronimo PCRE
, per me, mi dice che usa Perl Compatible Regular Expressions
, quindi presumo che usi l'algoritmo in stile Perl.
Quale algoritmo di espressione regolare utilizza PHP? E '"Perl 5.8.7 style", o usa l'algoritmo Thompson NFA molto più veloce, o un altro completamente? Potrebbe anche usare un backend Perl per eseguire le sue espressioni?
Se PHP fa utilizza un algoritmo in stile Perl, che cos'è esattamente? Sto cercando una definizione/spiegazione astratta in relazione ad altri algoritmi.
Hai ragione, PCRE è sinonimo di espressioni regolari compatibili con Perl. Tuttavia, non è un algoritmo. – BoltClock
PCRE significa in genere la [libreria di pcre] (http://en.wikipedia.org/wiki/Pcre), tuttavia, che utilizza gli algoritmi in stile Perl che sostituiscono la parte posteriore. IIRC l'approccio NFA vede solo grandi guadagni di prestazioni per tipi tipici di query su enormi dataset, però; 1.000.000 di volte è una drammatica esagerazione per le applicazioni tipiche. – Dougal
Nota che l'autore di quell'articolo ha implementato una libreria chiamata ['re2'] (http://code.google.com/p/re2/), che utilizza le espressioni regolari tradizionali e quindi è più veloce su determinati input, specialmente quelli di grandi dimensioni . ['php-re2'] (https://github.com/arraypad/php-re2) è un insieme di associazioni PHP a' re2'; Non ho idea se va bene. – Dougal