ElTicus.com

Programación, lenguajes y recursos para programadores

**
Truco
Ejemplo práctico de las funciones de expresiones regulares: Como identificar una dirección email dentro de un archivo de texto
Utilizando la poderosa función EREG de PHP
Publicado por jl Fecha: 2007-08-23 10:52:40 Idioma: Español Tipo de documento: Truco

Como identificar una dirección email dentro de un archivo de texto

Ejemplo práctico del uso de las funciones de expresiones regulares

Las funciones para el análisis de cadenas con expresiones regulares, son una de las herramientas más poderosas que nos ofrecen los lenguajes de programación. Con ellas podemos hacer que nuestros programas aparenten tener un cierto nivel de "inteligencia" que de otro modo podría ser algo complejo de implementar.

En este ejemplo, podemos ver como con escasas 10 líneas, la funcion MAILS() nos identifica y devuelve todas las ocurrencias de expresiones tipo e-mail que contiene una cadena.

Es facil darse cuenta de todo el trabajo que esto nos ahorra, ya que implementar esto solamente con las funciones de manejo de cadenas básicas, sería un proyecto bastante más complicado.


Como funciona

Este programita, lo deberemos poner en algun servidor y junto a él un archivo llamado x.txt, el cual contendrá un texto (que puede ser muy largo) y el programa tratará de encontrar todas las direcciones de correo electrónico que existan en x.txt y las mostrará en pantalla.

Código fuente completo

<html>
<body>

<?php

/* MAILS nos imprime en pantalla todas las ocurrencias del tipo cadena@servidor
   que encuentra dentro de la cadena $cad que recibe como parámetro */

function MAILS($cad)
{
  $i=0;
  while($tld = ereg("[a-zA-Z0-9]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+", $cad, $regs))
  {
   $cad=str_replace($regs[0],'**',$cad);
   echo $regs[0]."<br/>";
  $i++;
  if($i>100) die('***** DESBORDAMIENTO ******<br/>'); //<- validación
  }
}

/*   El archivo x.txt tiene que existir y ahi es donde se buscarán 
las direcciones de email. Se trata de un archivo de texto comun y corriente */

$archivo='x.txt';

$fh = fopen($archivo, 'r') or die("Can't open file");
$ii=0;
while(!feof($fh))
{
   $bufer = fgets($fh, 4096);
   MAILS($bufer);
   $ii++;
   if($ii>10000) {die('**** DESBORDAMIENTO ****<br/>');} //<- validación
}
fclose($fh);

echo "<hr> FIN";
?>

</body>   
</html>

Explicación del código:

La línea:

ereg("[a-zA-Z0-9]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+", $cad, $regs)

es la clave de todo el proceso, la funcion ereg ejecuta la operación de buscar un patron (primer parámetro) dentro de una cadena (segundo parámetro, es decir $cad) y nos coloca el resultado de la busqueda dentro del array $regs (tercer parámetro) este array será el resultado. De este resultado, nos interesa solo el primer valor ($regs[0]) que contiene la cadena completa encontrada.

si desglosamos el patron, sería más o menos asi:

elemento Significado
[a-zA-Z0-9] Debe tener una letra minuscula o mayúscula o un numero
+ Lo anterior debe repetirse una o más veces
@ Luego tiene que tener una arroba
[a-zA-Z0-9_-] Nuevamente una letra o número o guión bajo o guión medio
+ Lo anterior debe repetirse una o más veces
(\.[a-zA-Z0-9_-]+) Todo el paréntesis indica la busqueda de un punto seguido de más letras y/o números una o más veces
+ Lo anterior (todo el paréntesis) debe repetirse una o más veces

Los demas valores de array pueden ser tambien de mucha utilidad, ya que contienen las diferentes partes del patrón según las va identificando a través de los paréntesis del mismo.


La funcion ereg nos devuelve un valor booleano de VERDADERO cuando encontró una ocurrencia del patrón y FALSO cuando no lo encontró, lo cual nos permite ponerlo dentro de un ciclo y de este modo encontrar todas las cadenas que coincidan.

la linea:

$cad=str_replace($regs[0],'**',$cad);

Nos reemplaza el mail encontrado por un par de asteriscos '**', esto para asegurarnos de que en la siguiente vuelta del ciclo no nos encuentre la misma cadena.

Se puede mejorar

Nótese que no se incluyen emails que contengan puntos o guiones en el nombre antes de la arroba y suelen existir.
La función fopen puede abrir igual una dirección tipo URL que un archivo, por lo que se puede dirigir a abrir una página Web y traernos todos los correos que ahí encuentre.


Este artículo fue echo solo con el objetivo del aprendizaje, por favor no hagan mal uso de este script




Nadie ha puesto ningún comentario todavía


Haz un comentario sobre este tema
Nombre email (no se muestra)
comentario:
Escribe las 2 letras que ves aquí: Imagen anti-spam =




No hay comentarios

Artículos relacionados:
Recurso no clasificado Check de diseño Recurso no clasificado Como ponerle un contador de visitas a tu sitio en menos de 5 minutos. Recurso no clasificado Como colocar un relojito en una página WEb y que se esté refrescando cada segundo. Recurso no clasificado Como imprimir la fecha en español utilizando PHP aunque el idioma del servidor sea el inglés. Recurso no clasificado Como construir una gráfica de barras con CSS y PHP
Tip Como mandar parámetros a una aplicación de Flash en Internet Explorer y Mozilla Recurso no clasificado Como dibujar un calendario en una página Web Truco Como generar un archivo XLS desde PHP Tip Como escalar una imagen utilizando PHP y las funciones de la librería GD Tip Como corregir la fecha de mi servidor si éste se encuentra en un uso horario diferente al mio
Recurso no clasificado Huevos de Pascua (Easter Egg) Recurso no clasificado Para imprimir la fecha en español utilizando PHP independientemente del lenguaje del servidor (Utilizando ARRAYS) Truco Como generar un archivo .DOC de WORD desde PHP Truco Como generar un archivo .DOC/.RTF de WORD desde PHP (Incluyendo tablas) Recurso no clasificado Como cambiar el tamaño de una imagen JPG sin que esta se deforme.
Recurso no clasificado Programa en PHP que convierte una cantidad dada como un número a su equivalente en letra Recurso no clasificado Como convertir una fecha de Lenguaje Natural a tipo DATE Recurso no clasificado Las tablas de multiplicar en PHP Truco Como alternar colores en una tabla fácilmente Recurso no clasificado Generar una tabla HTML desde una Base de Datos MYSQL
Recurso no clasificado Aprendiendo MySQL con PHP