• Publicidad

HTML::LinkExtor

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

Quitando caracteres con expresiones regulares

Notapor erv-Z » 2009-11-07 21:07 @921

Ps, hasta ahora voy algo bien, creo, pero quiero quitar algunos caracteres de la URL; aquí un código que hice.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $a = "https://addons.mozilla.org/en-US/firefox/addon/5457";
$a =~ s/http:\/\/[a-zA-Z0-9_.]\// /;
print "$a\n",
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Lo que quiero hacer es eliminar el https://addons.mozilla.org
para que solo quede el /en-US/firefox/addon/5457.
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Publicidad

Re: HTML::LinkExtor

Notapor explorer » 2009-11-08 10:26 @476

Casi lo tienes. Te vale con poner que la 's' que acompaña a http puede aparecer o no, por lo que tenemos que ponerla opcional.

En la clase [a-zA-Z0-9_.] te falta indicar que serán más de un caracteres así. Le ponemos un '+' a continuación para hacer eso.

Y la última '/' no necesitamos borrarla.

En la parte de sustitución, si lo que queremos es eliminar, pues no ponemos nada.

Queda:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $a = 'https://addons.mozilla.org/en-US/firefox/addon/5457';

$a =~ s/https?:\/\/[a-zA-Z0-9_.]+//;

print "$a\n";   # /en-US/firefox/addon/5457
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


aunque a veces es más cómodo y seguro usar algo ya hecho, como el módulo URI::Split:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. #use warnings;
  4. #use diagnostics;
  5.  
  6. use URI::Split qw(uri_split);
  7.  
  8. my $a = 'https://addons.mozilla.org/en-US/firefox/addon/5457';
  9.  
  10. my ($scheme, $auth, $path, $query, $frag) = uri_split($a);
  11.  
  12. print "[$scheme], [$auth], [$path], [$query], [$frag]\n"; # [https], [addons.mozilla.org], [/en-US/firefox/addon/5457], [], []
  13.  
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: HTML::LinkExtor

Notapor erv-Z » 2009-11-08 12:30 @562

mil gracias explorer.

Saludos.
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Re: HTML::LinkExtor

Notapor erv-Z » 2009-11-08 12:36 @567

Buena de nuevo explorer xD, ps eh estado codeandolo con el modulo URI::Split y no me ah funcionado, nose que cual es mi problema.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use WWW::Mechanize;
  2. use URI::Split qw(uri_split);
  3.  
  4. my $mech = WWW::Mechanize->new();
  5.  
  6. $mech->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12");
  7.  
  8. $mech->get("http://www.mozilla.com/en-US/firefox/central/");
  9.  
  10. my @enlaces = $mech->find_all_links();
  11.  
  12. for my $enlace (@enlaces) {
  13.     my ($scheme, $auth, $path, $query, $frag) = uri_split($enlace>url());
  14.     print $path,"\n";
  15.    
  16. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Re: HTML::LinkExtor

Notapor explorer » 2009-11-08 12:49 @575

En la línea 13 pone

$enlace>url()

¿No será

$enlace->url()

?
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: HTML::LinkExtor

Notapor erv-Z » 2009-11-08 12:54 @579

Grax, me funcionó con el módulo, ahora lo estoy haciendo con la expresión regular y no me funciona.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use WWW::Mechanize;
  2.  
  3. my $mech = WWW::Mechanize->new();
  4.  
  5. $mech->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12");
  6.  
  7. $mech->get("http://www.mozilla.com/en-US/firefox/central/");
  8.  
  9. my @enlaces = $mech->find_all_links();
  10.  
  11. for my $enlace (@enlaces) {
  12.     $enlace->url() =~ s/https?:\/\/[a-zA-Z0-9_.]+//;
  13.     print $enlace->url(),"\n";
  14.    
  15. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Re: HTML::LinkExtor

Notapor explorer » 2009-11-08 14:17 @637

No puedes aplicar una expresión regular a una función (salvo en un caso muy particular).

Debes sacar el valor y luego modificarlo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for my $enlace (@enlaces) {
    my $url = $enlace->url();
    $url =~ s/https?:\/\/[a-zA-Z0-9_.]+//;
    print "$url\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: HTML::LinkExtor

Notapor erv-Z » 2009-11-08 14:25 @642

oka, no sabía eso, gracias de nuevo.
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Anterior

Volver a Básico

¿Quién está conectado?

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