2012-04-18 16 views
9

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.

+2

Hai ragione, PCRE è sinonimo di espressioni regolari compatibili con Perl. Tuttavia, non è un algoritmo. – BoltClock

+2

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

+1

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

risposta

5

Dal manuale:

http://www.php.net/pcre: Espressioni

regolari (Perl-Compatible)

http://www.php.net/manual/en/intro.pcre.php:

La libreria PCRE è un insieme di funzioni che implemen t normale corrispondenza del modello di espressione utilizzando la stessa sintassi e semantica di Perl 5, con alcune differenze (vedere di seguito). L'attuale implementazione corrisponde a Perl 5,005.

Problemi correlati