Extraer emails de un texto

He buscado mucho por internet para sacar direcciones de correo de una cadena y he encontrado algunas funciones utilizando expresiones regulares pero siempre se me han quedado cortas, en esta que os muestro la he modificado y admite todo tipo de email, de subdominios, con extensiones de 4 letras como las .info, etc. Las aplicaciones son varias puedes leer un fichero en una cadena, un email de un buzón de correo, en fin cualquier cadena de cualquier longitud está soportada.

1 function tieneEmails($cuerpo){
2 stripslashes($cuerpo);
3 $exp_email = '[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})+';
4 if (preg_match_all ("/$exp_email/i", $cuerpo, $emails, PREG_SET_ORDER))
5 return TRUE;
6 return FALSE;
7 }


  • La variable $exp_email contiene la expresion regular y es el motor de la función.
  • La función preg_match_all busca todas las coincidencias y las almacena en el arry $emails, con ellas podeis hacer lo que quieran, no lo he implementado porque no es el objetivo.
  • La variable $cuerpo contiene la cadena objetivo.
Tengo que agradecer a

Comentarios