2012-04-18 20 views
9

Después de leer this article sobre dos tipos diferentes de algoritmos de expresión regular (Perl 5.8.7 y Thompson NFA), siendo este último ~ 1,000,000 veces más rápido que el anterior, según el artículo. Utilizo PHP a diario y uso mucho la expresión regular, así que quería saber qué algoritmo usa PHP.¿Qué algoritmo de expresión regular usa PHP?

Encontré this question, pero solo es para JavaScript. Una de las respuestas indica que JavaScript usa el algoritmo de Thompson NFA, pero que, por supuesto, variará de implementación a implementación. Creo que PHP puede haber cambiado a usar los algoritmos más rápidos cuando se movió a su conjunto de funciones PCRE, desaprobando las cosas ereg_*.

He visto el PHP PCRE documentation y, por lo que pude ver, no me dice nada sobre qué algoritmo utiliza. El acrónimo PCRE, para mí, me dice que usa Perl Compatible Regular Expressions, así que supongo que usa el algoritmo de estilo Perl.

¿Qué algoritmo de expresión regular usa PHP? ¿Es "estilo Perl 5.8.7", o usa el algoritmo de Thompson NFA, mucho más rápido, u otro completamente? ¿Podría incluso usar un servidor Perl para ejecutar sus expresiones?

Si PHP hace utiliza un algoritmo de estilo Perl, ¿qué es exactamente? Estoy buscando una definición/explicación abstracta en relación con otros algoritmos.

+2

Tiene razón, PCRE significa expresiones regulares compatibles con Perl. Sin embargo, eso no es un algoritmo. – BoltClock

+2

PCRE normalmente significa la [biblioteca pcre] (http://en.wikipedia.org/wiki/Pcre), que usa los algoritmos de estilo Perl de sustitución hacia atrás. Sin embargo, el enfoque de IIRC para NFA solo ve grandes ganancias de rendimiento para tipos típicos de consultas en grandes conjuntos de datos; 1,000,000 de veces es una dramática exageración para aplicaciones típicas. – Dougal

+1

Tenga en cuenta que el autor de ese artículo implementó una biblioteca llamada ['re2'] (http://code.google.com/p/re2/), que usa expresiones regulares tradicionales y, por lo tanto, es más rápida en ciertas entradas, especialmente en las grandes. . ['php-re2'] (https://github.com/arraypad/php-re2) es un conjunto de enlaces de PHP a' re2'; No tengo idea si es bueno. – Dougal

Respuesta

5

Desde el manual:

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

regulares (Perl-compatibles)

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

La biblioteca PCRE es un conjunto de funciones que implementan t coincidencia de patrón de expresión regular con la misma sintaxis y semántica que Perl 5, con solo algunas diferencias (consulte a continuación). La implementación actual de corresponde a Perl 5.005.

Cuestiones relacionadas