• Publicidad

Capturando URL

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

Capturando URL

Notapor Nost89 » 2012-05-24 09:29 @437

Hola a todos, a ver si me podéis echar una mano :)

Estoy intentando filtrar URL en un código HTML mediante una expresión regular pero cuando se encuentra con dos enlaces seguidos toma como URL desde la cabecera del primer enlace al cierre del segundo enlace.

Quería evitarlo excluyendo el símbolo ">" dentro de los paréntesis, pero creo que no lo estoy haciendo bien:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         while($catalogo =~ m/href\=\'([^\>].*)\'\>\d+\</g)
  2.         {
  3.                 print $1."\n";
  4.         }
  5.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Esto es lo que me devuelve:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. catalogo.asp?S/943/0/1,'>1</a>&nbsp;2&nbsp;<a href='catalogo.asp?S/943/0/21,
  2.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
cuando debería ser:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. catalogo.asp?S/943/0/1
  2. catalogo.asp?S/943/0/21
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Un saludo y gracias de antemano ;)
Nost89
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-05-24 09:18 @429

Publicidad

Re: Capturando URL

Notapor explorer » 2012-05-24 10:05 @462

Bienvenido a los foros de Perl en Español, Nost89.

Debes usar un modificador del operador 'avaricioso' .*, para indicar que solo queremos capturar hasta antes del carácter que nos sirve de ancla.

Entonces... prueba con esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         while ($catalogo =~ m/href='(.*?)'/g)
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Fíjate:
  • no hace falta poner '\' delante de '=', "'", '<', '>'
  • no es necesario poner '\d+', porque, realmente, no lo vamos a capturar, ni nos sirve de referencia para buscar lo que queremos
  • el modificador '?' le indica a '.*' que capture todo lo que pille, pero solo hasta la primera comilla que encuentre, nada más.
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: Expresiones regulares

Notapor Nost89 » 2012-05-24 10:08 @464

Lo había solucionado cambiando lo siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         while($catalogo =~ m/href\=\'([^\>].*)\'\>\d+\</g)
  2.         {
  3.                 print $1."\n";
  4.         }
  5.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

por:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         while($catalogo =~ m/href\=\'([^>]*)\'\>\d+\</g)
  2.         {
  3.                 print $1."\n";
  4.         }
  5.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Pero lo que me has indicado es mucho más sencillo y no lo sabía, muchas gracias :)
Nost89
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-05-24 09:18 @429


Volver a Básico

¿Quién está conectado?

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