• Publicidad

Buscar direcciones de correo electrónico

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Buscar direcciones de correo electrónico

Notapor BigBear » 2013-11-04 17:46 @782

Me acuerdo que había preguntado esto antes y lo resolví en PHP, pero no lo encuentro, así que tengo que empezar de nuevo. La pregunta es esa: ¿qué expresión regular me conviene para buscar direcciones de correo en una variable?

Tengo este código, pero no funciona:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $code = "hola mundo [email protected] hola mundo";
  2.  
  3. if($code=~/(.*?)\@(.*?)/) {
  4. print $1."@".$2;
  5. }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


¿ Alguien me puede ayudar ?

P.D.: acá lo encontré en PHP; ahora solo me falta traducirlo.
Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
  1. if (!empty($text)) {
  2. $res = preg_match_all(
  3. /[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}/i”,
  4. $text,
  5. $matches
  6. );
Coloreado en 0.020 segundos, usando GeSHi 1.0.8.4
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Buscar direcciones de correo electrónico

Notapor explorer » 2013-11-05 07:22 @348

Como ya se ha dicho en otros hilos (usar el sistema de búsqueda), encontrar o validar direcciones de correo electrónico, es bastante complicado. Es mucho más complicado que usar una expresión regular tan sencilla como /(\S+@\S+)/.

Es mucho más cómodo usar un módulo que sea capaz de hacerlo. Por ejemplo, Email::Address:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Email::Address;
  2.  
  3. my @direcciones = Email::Address->parse($code);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Buscar direcciones de correo electrónico

Notapor BigBear » 2013-11-05 09:34 @440

Gracias por la ayuda, pero estaba buscando una expresión regular porque voy a hacerlo en Delphi usando un componente llamado perlregex.

¿ Hay alguna posibilidad de encontrar mails con regex ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Buscar direcciones de correo electrónico

Notapor danimera » 2013-11-07 11:12 @508

Si abres un módulo buscas donde está la expresión regular y la copias así mismo para que la uses en Delphi con perlregex.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Buscar direcciones de correo electrónico

Notapor explorer » 2013-11-07 12:29 @562

¡Je, je! Pues lo va a tener difícil... en Email::Address hay, nada más y nada menos, que 26 expresiones regulares :twisted:
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Buscar direcciones de correo electrónico

Notapor BigBear » 2013-11-30 13:44 @613

Hola. Acabo de encontrar una expresión regular para encontrar direcciones de correo en Stackoverflow. El código es este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict; use warnings; use feature 'say';
  2. use autodie; # does `... or die "Can't open $file: $!"` for me
  3. my $regex = qr/[A-Z0-9._%+-]+\@[A-Z0-9.-]+\.[A-Z]{2,4}/i;
  4. my $found = 0;
  5.  
  6. my $contact_file = "contacts.txt";
  7. my $email_file   = "emailaddresses.txt";
  8.  
  9. open my $contact, "<", $contact_file;
  10. open my $email, ">", $email_file;
  11.  
  12. while (<$contact>) {    # read from the $contact filehandle
  13.   while (/($regex)/g) { # the /g is optional if there is max one address per line
  14.     $found++;
  15.     say {$email} $1;    # print to the $email file handle. {curlies} are optional.
  16.   }
  17. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Funciona a la perfección pero el problema es cuando quiero implementar la expresión regular por mi mismo con este código.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $code = "hola mundo [email protected] hola mundo [email protected] sdsa test[at]hotmail.com";
  2.      
  3. my $regex = qr/[A-Z0-9._%+-]+\@[A-Z0-9.-]+\.[A-Z]{2,4}/i;
  4.  
  5. while($code=~/($regex)/g) {
  6. print "mail : $1\n";
  7. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Como ven estoy tratando de sacar todos las direcciones de correo con la expresión regular que encontré en Stackoverflow. El tema es que mi código no devuelve nada.

¿ Qué hice mal ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Buscar direcciones de correo electrónico

Notapor explorer » 2013-11-30 15:51 @702

Si usaras el modo strict, el propio Perl te lo hubiera dicho:
Global symbol "@hotmail" requires explicit package name at ./kk.pl line 1.
Global symbol "@test" requires explicit package name at ./kk.pl line 1.

El problema es que has puesto el texto entre comillas dobles, y eso implica interpolación de las variables que hay en el interior, y hay un par de arrobas que le hacen creer a Perl que son variables de array.

Usa comillas simples. O el operador q() (que es lo mismo).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Buscar direcciones de correo electrónico

Notapor BigBear » 2013-11-30 15:57 @706

Gracias por la ayuda, explorer. Pensé que le había errado en otra cosa.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados