• Publicidad

regexp en etiquetas HTML

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

regexp en etiquetas HTML

Notapor securedigital » 2009-03-25 09:56 @456

¡Hola a todos!

Esta vez estoy liado y atascado en una regexp... explico un poco :)

Existe una variable con todo un contenido código HTML, bastante largo... dentro de ese código existen ciertas partes que me interesa sacar del código. Todas ellas empiezan siempre igual, pero dentro tienen diferentes valores que después ya trataré...

Sintáxis: [ Descargar ] [ Ocultar ]
  1. <td class="td0"><a href="http://www.NoExiste.com/dns/subdom.Noexisteix.com.html">subdom.NoExiste.com</a> 


Pues mi expresion no funciona y al analizar el HTML no coge ese trocito de código html.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if($html =~ /^<td class="td0"><a href="[áéíóúàòa-zA-Z0-9_.-]">[áéíóúàòa-zA-Z0-9_.-]</a>$/msi){
     push(@arr, $html);
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Un colega me ayudó a corregir la expresion, y me sugirió esto (no me funciona tampoco):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ($html =~ /^<td class="td0"><a href="[^"]*">[^<]*<\/a>$/i) {
     push(@arr, $html);
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



¿Alguna idea de qué hay mal?

El contenido de la variable HTML es multilínea... ya que tiene un jarto de código dentro y ese trocito de HTML que intento recoger se puede repetir muchísimas veces, pero cada uno tendrá dentro del href y los otros tags diferente información; cada uno debería ser guardado en la array llamada @arr.

Saludos y gracias.
securedigital
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2008-05-24 08:09 @381

Publicidad

Notapor explorer » 2009-03-25 11:18 @513

Pero... ¿qué es lo que distingue a ese trozo de HTML del resto de la página?

Por ejemplo, ¿me aseguras que solo te interesa el contenido de las celdas de tabla con estilo "td0"?

Y, otra cosa, de todo eso, ¿qué parte te interesa guardar? ¿toda la línea o solo una parte?
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

Notapor securedigital » 2009-03-25 13:23 @599

Sí, es decir, sólo cierto contenido de las celdas con el estilo "td0".

Hay varias celdas con ese estilo, y solo de esas celdas con ese estilo me interesaría guardar el texto del href, no el vínculo.

En el ejemplo anterior, pues me interesaría guardar "subdom.NoExiste.com" antes de cerrar el href.

El problema es que el fuente HTML pues dentro de la celda hay más contenido que no interesa, es paja. El contenido exacto de mi HTML sería así:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. <td class="td0"><a href="http://www.NoExiste.com/dns/subdom.Noexisteix.com.html">subdom.NoExiste.com</a><div class="div5">Texto de ninguna utilidad para mi</div> </td> 


Saludos
securedigital
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2008-05-24 08:09 @381

Notapor explorer » 2009-03-25 13:46 @615

Pues entonces es muy sencillo: tenías que haber cambiado el if() por un while(), junto con la opción /g en la expresión regular:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;


my $html = <<EOF;
<td class="td0"><a href="http://www.NoExiste.com/dns/subdom.Noexisteix.com.html">subdom.NoExiste1.com</a><div class="div5">Texto de ninguna utilidad para mi</div> </td>
<td class="td0"><a href="http://www.NoExiste.com/dns/subdom.Noexisteix.com.html">subdom.NoExiste2.com</a><div class="div5">Texto de ninguna utilidad para mi</div> </td>
<td class="td0"><a href="http://www.NoExiste.com/dns/subdom.Noexisteix.com.html">subdom.NoExiste3.com</a><div class="div5">Texto de ninguna utilidad para mi</div> </td>
<td class="td0"><a href="http://www.NoExiste.com/dns/subdom.Noexisteix.com.html">subdom.NoExiste4.com</a><div class="div5">Texto de ninguna utilidad para mi</div> </td>
EOF


my @arr;

while ( $html =~ /<td class="td0">.*?<a.+?>(.+?)<\/a>/simog ) {
    push @arr, $1;
}

print "@arr\n";

__END__
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

Notapor securedigital » 2009-03-26 11:49 @534

¡Ostras! ¡Sí funciona! Pues anda que no me complicaba yo la vida... madre mía...

Muchas gracias

PD: no conocía el modificador /o, lo miraré en la documentación, buen aporte :)

PD2: Sí, el modificador para múltiples elementos /g estaba en el programa..., hice muchas pruebas y en alguna de ellas me lo debí cargar... :oops:

Saludos y gracias
securedigital
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2008-05-24 08:09 @381


Volver a Avanzado

¿Quién está conectado?

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