Hay mucha discusión sobre cuál es más rápido y mejor.
Si planea algún día avanzar a PHP6, se tomará una decisión. De lo contrario:
El consenso general es que PCRE es la mejor solución, pero si tiene una página específica con mucho tráfico y no necesita PHP6, puede valer la pena realizar algunas pruebas. Por ejemplo, a partir de los comentarios Manual de PHP:
deprecating POSIX expresiones regulares en PHP para búsqueda Perl es como la sustitución de tablas de madera y ladrillo de una casa con habitaciones y paredes prefabricadas. Claro, es posible que pueda mezclar y combinar algunas de las partes, pero es mucho más fácil de modificar con todas las piezas dispuestas delante de usted.
PCRE más rápido que POSIX RE? No siempre. En un reciente proyecto de motor de búsqueda aquí en Cynergi, tenía un bucle simple con pocas funciones ereg_replace() que tardaron 3 minutos en procesar los datos.Cambié ese bucle de 10 líneas en un código escrito a mano de 100 líneas para el reemplazo y ¡El bucle ahora tardó 10 segundos en procesar los mismos datos de ! Esto me abrió los ojos a lo que puede EN ALGUNOS CASOS sea muy lento expresiones regulares. Últimamente decidí buscar expresiones compatibles con Perl (PCRE). La mayoría de las páginas reclaman PCRE son más rápidas que POSIX, pero algunas afirman lo contrario. Me decidí por las marcas de propias. Mis primeras pruebas confirmaron PCRE a ser más rápido, pero ... los resultados fueron ligeramente diferente a los demás estaban recibiendo, por lo que decidí referencia todos los casos de uso RE que tenía en una línea segura 8000- (y rápido) Proyecto webmail aquí en Cynergi para verificarlo. ¿Los resultados? ¡Inconclusivo! A veces PCRE es más rápido (a veces por un factor mayor que 100 veces más rápido!), Pero algunos otros veces POSIX RE son más rápidos (por un factor de 2x). Todavía tengo que encontrar una regla en cuando uno u otro es más rápido. Es no sólo por el tamaño de búsqueda de datos, cantidad de datos emparejados, o "RE tiempo de compilación" que mostraría cuando se repite la función de frecuencia: uno siempre será más rápido que el otro . Pero no encontré un patrón aquí. Pero a decir verdad, tampoco lo hice tómese el tiempo para buscar en el código fuente y analizar el problema. Puedo darle algunos ejemplos, sin embargo. El POSIX RE ([0-9] {4})/([0-9] {2})/([0-9] {2}) [^ 0-9] + ([0-9 ] {2}): ([0-9] {2}) es 30% más rápido en POSIX que cuando se convirtió a PCRE (incluso si usa \ d y \ D y concordancia no codiciosa). En por otro lado, un patrón complejo similar PCRE /[0-9] {1,2} [ \ t] + [a-zA-Z] {3} [\ t] + [0-9] { 4} [ \ t] + [0-9] {1,2}: [0-9] {1,2} (: [0-9] {1,2})? [ \ t] + [ + -] [0-9] {4}/es 2.5 veces más rápido en PCRE que en POSIX RE. Patrones de reemplazo simples como ereg_replace ("[^ a-zA-Z0-9 -] +", "", $ m ); son 2 veces más rápidos en POSIX RE que PCRE. Y luego nos confundimos nuevamente porque un patrón POSIX RE como (^ | \ n | \ r) begin-base64 [\ t] + [0-7] {3,4} [ \ t] + ... ... es 2 veces más rápido que POSIX RE, , pero el PCRE /^ sensible a las mayúsculas y minúsculas ha recibido [\ t] *: [\ t] por [\ t] + ([^ \ t] +) [\ t ]/i es 30 veces más rápido que su versión POSIX RE! Cuando se trata de sensibilidad de la caja, PCRE hasta ahora parecía ser la mejor opción. Pero I encontró un comportamiento realmente extraño de ereg/eregi. En una muy simple POSIX RE (^ | \ r | \ n) mime-versión [\ t]: Encontré eregi() tomando 3.60s (solo un número en una prueba de referencia), mientras que el PCRE correspondiente tomó 0.16s! ¡Pero si utilicé ereg() (distingue entre mayúsculas y minúsculas), el tiempo POSIX RE bajó a 0.08s! Entonces investigué más . Traté de hacer el POSIX RE insensible a mayúsculas y minúsculas. Llegué tan lejos como este: (^ | \ r | \ n) [mM] [iI] [mM] [eE] -vers [iI] [oO] [nN] [ \ t] *: Esta versión también tomó 0.08s. Pero si trato de aplicar la misma regla a cualquiera de las letras 'v', 'e', 'r' o 's' que no han cambiado, el tiempo ha vuelto a la marca de los 3.60 y no gradualmente, ¡pero de inmediato! Los datos de prueba no tenían ningún "vers" en , ni otras palabras "mime" ni ningún "ion" que pudiera confundir el analizador POSIX , por lo que estoy perdido. Abajo línea: ¡siempre compare su PCRE/ POSIX RE para encontrar el más rápido! Las pruebas se realizaron con PHP 5.1.2 bajo Windows, desde la línea de comandos. Pedro Freire cynergi.com
ah ok gracias No vi eso por alguna razón. ¡Adiós ereg, supongo! Respuesta aceptada – Evernoob
Como señaló Percy, 'mb_ereg_match()' y otras funciones multibyte * ereg * no están en desuso. –