Diferencias entre preg_match y ereg

Voy a explicar la diferencia entre estas dos funciones propias de PHP para evaluar y extraer información sobre cadenas mediante el uso de expresiones regulares o patrones.

Aparentemente estas 2 funciones son aparentemente iguales. Las diferencias entre ellas son mínimas, como por ejemplo que en preg_match es obligatorio establecer unas barras que delimitan el patrón, o que esta función devuelve un entero (int) de 0-n, en función de las coincidencias encontradas, mientras que ereg devuelve un booleano en función de si ha encontrado o no coincidencias.

Entonces. ¿Dónde radica la diferencia entre preg_match y ereg? Pues la principal diferencia ya que ambos también devuelven un array con las coincidencias por referencia, es la potencia. La función preg_match es muy potente y muy útil al igual que ereg. Generalmente se suele utilizar preg_match para extraer información de un texto y la función ereg para evaluar si un texto cumple un patrón o no, como es el caso de un email [a-zA-Z0-9]{1,}@[a-zA-Z0-9]{1,}.[a-zA-Z]{2,3}. El problema viene cuando realizamos un patrón relativamente complejo sobre un texto extenso, es ahí cuando vemos la verdadera diferencia de potencia entre preg_match y ereg. Si comparamos vemos que preg_match podría llegar a tardar 60 segundos en analizarlo (hablo por propia experiencia) mientras que el mismo patrón evaluado con ereg, tardaría unos 5 o 6 segundos.

En conclusión podríamos decir que preg_match es una función ideal para analizar y realizar patrones sobre textos relativamente pequeños, tal como el contenido de una pagina web por ejemplo, y ereg es para evaluar patrones rápidos como palabras o emails y cuando el patrón a evaluar es muy muy grande.

ACTUALIZACIÓN

Este artículo lo escribí hace casi 10 años. En ese momento era todo correcto. Con el tiempo la función ereg, heredada de PERL fue marcada como deprecated y de hecho ya no se encuentra en PHP7. Aunque ereg seguía siendo más rápida que preg_match, a esta última función le han añadido más versatilidad.

También comentar que la cadena de validación del email es un ejemplo, antiguo e incompleto.

3 comentarios en “Diferencias entre preg_match y ereg

  1. Desde la versión 5.3 de PHP la función ereg() lanza un E_DEPRECATED, mientras que a partir de la versión 6 la función ha sido erradicada, por lo que es sumamente importante no usar ereg() si se quiere programar un codigo portable.

  2. Es una lastima, porque ereg es mucho mas rapido de ejecutar que preg_match, pero de diferencia abismal. Espero que se centren en mejorar los preg_match y preg_match_all

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *