• Publicidad

Expresiones regulares para localizar URL

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

Expresiones regulares para localizar URL

Notapor isidrobu » 2011-04-03 14:23 @641

Buenas, tengo que hacer un ejercicio en perl el cual le meto un fichero el cual es el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <html>
  2. <body>
  3.  
  4. este <a href=http://www.sitio.com > enlace </a>
  5. te lleva a mi sitio.
  6.  
  7. <a href=http://www.google.com>
  8. <img src=firma.jpg> </a>
  9.  
  10. </body>
  11. </html>
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


El problema que me plantean es que tengo que sacar las direcciones URL del fichero, pero tengo que utilizar expresiones regulares.

Yo he hecho lo siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open (F, "texto.txt");
  2. @datos=<F>;
  3. close(F);
  4. for(my $i=0;$i<$#datos+1;$i++)
  5. {
  6.  
  7.         if($datos[$i] =~ /href=/gi)
  8.         {
  9.                 /href=/;
  10.                 print "$' \n";
  11.         }
  12. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Me da la dirección URL pero cuando termina el .com me sigue soltando carácter.

Por ejemplo, en la primera dirección URL me imprime http://www.sitio.com > enlace </a>
isidrobu
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-04-03 14:15 @635

Publicidad

Re: Expresiones regulares para localizar URL

Notapor explorer » 2011-04-03 14:34 @649

Bienvenido a los foros de Perl en español, isidrobu.

El problema es que $' muestra lo que sigue a lo detectado por la expresión regular (que, a propósito, estás poniendo dos veces).

Como la cadena de caracteres es toda la línea, y estás buscando por 'href=', entonces $' devuelve todo lo que sigue al patrón encontrado.

Deberías intentar ampliar la expresión regular, indicando el momento en que debe iniciar y terminar lo que estás buscando.

Pista: las URL terminan antes del siguiente carácter '"', espacio en blanco, o '>'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresiones regulares para localizar URL

Notapor isidrobu » 2011-04-03 17:21 @764

Hola.

He intentado hacer lo que me ha comentado pero sigue sin funcionar.

Lo que he puesto es :
if ($datos[$i] =~ m/href='(.>)'/)

y no me imprime nada.
isidrobu
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-04-03 14:15 @635

Re: Expresiones regulares para localizar URL

Notapor explorer » 2011-04-03 17:30 @771

El patrón que has escrito, /href='(.>)'/, quiere decir:

* busca por el literal href=' (sí, la comilla también)

* seguido por un carácter cualquiera (.)

* seguido el literal >

* captura el carácter anterior a > y el propio > y los metes en $1 (este es el efecto de los paréntesis de captura)

* y todo seguido por una comilla

Me parece que esto no es lo que estás buscando...

Tienes que usar alguna combinación con los operadores * o + para encontrar una serie de caracteres.

Editado: en este hilo hemos hablado también de este tema.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Expresiones regulares para localizar URL

Notapor isidrobu » 2011-04-03 18:30 @812

Parezco un poco pesado pero creo que casi lo tengo, mi expresión regular es
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ($datos[$i] =~ /href=(.+)>/)
        {
                print "$1 \n";
        }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

el problema que me ha surgido ahora es que en la línea de mi fichero :
este <a href=http://www.sitio.com > enlace </a>
esto me imprime http://www.sitio.com > enlace </a quita el último > y no entiendo por qué no quita el anterior y se va al final.
isidrobu
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-04-03 14:15 @635

Re: Expresiones regulares para localizar URL

Notapor explorer » 2011-04-03 19:11 @841

Eso es porque .+ es un "avaricioso": va a capturar todo lo que pueda, hasta el final de línea.

Debes convertirlo a lo contrario de "avaricioso": que termine en cuanto encuentre el primer '>'.

Prueba con /href=(.+?)>/
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado