• Publicidad

Expresión regular extraer directorios de los URL

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

Expresión regular extraer directorios de los URL

Notapor seguridadenmimail » 2011-09-11 16:08 @713

Buenas,
Tengo una expresión regular, la cual la estoy utilizando desde consola, pero me gustaría tratar de hacerla en Perl, ya que me gustaría integrarla a un script que ya tengo.

¿Me pueden ayudar?

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. sed 's/http*:\/\/[^\/]*//;s/\/[^\/]*$/\//' prueba.txt | sort | uniq
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Donde prueba.txt es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
http://dominio/index.html
http://dominio/images/
http://dominio/manuales/imagenes/
http://dominio/archivos/archivos.txt
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Salida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
/
/archivos/
/images/
/manuales/imagenes/
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Como verán, la idea es parsear el archivo y quedarme con los directorios.

¿Alguien me puede ayudar?

Saludos.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853

Publicidad

Re: Expresión regular extraer directorios de los URL

Notapor explorer » 2011-09-11 20:45 @906

Bueno, esta es una posible solución:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl
  2. use 5.010;
  3. use File::Slurp;
  4.  
  5. my @urls = read_file('kk.txt', chomp => 1);      # Leemos el fichero y quitamos retornos de carro
  6.  
  7. my @paths
  8.     =  
  9.     map {                       # Filtrado
  10.         s{https?://[^/]*}{};    # Parte inicial
  11.         s{/[^/]*$}{/};          # Parte final
  12.         $_;                     # Resultado
  13.     }  
  14.     @urls
  15.     ;  
  16.  
  17. my %paths                       # Las claves de %paths guardan valores únicos
  18.     =  
  19.     map {
  20.         $_ => $1
  21.     }  
  22.     @paths
  23.     ;  
  24.  
  25. @paths = sort keys %paths;      # Nos quedamos con los valores únicos y ordenados
  26.  
  27. say "@paths";
  28.  
  29. __END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

De forma más estricta, sería mejor usar módulos para extraer esos valores:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use 5.010;
  2. use File::Basename;
  3. use URI;
  4.  
  5. for my $url (@urls) {
  6.     $url .= 'index.html' if $url =~ m{/$};
  7.     my $uri = URI->new($url);
  8.     my $path = $uri->path();
  9.     say "[$url] => [$path] => ", dirname($path);
  10. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Otra forma, más abreviada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use 5.010;
  2. use File::Slurp;
  3. use List::MoreUtils 'uniq';
  4.  
  5. my @paths = sort uniq map { s{https?://[^/]*}{}; s{/[^/]*$}{/}; $_ } read_file('kk.txt');
  6. say "@paths";
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: Expresión regular extraer directorios de los URL

Notapor salva » 2011-09-12 00:39 @069

Como ya te ha recomendado explorer, en este caso el módulo URI es probablemente la mejor solución.

Pero para casos similares donde necesites una expresión regular para algo común (por ejemplo, direcciones IP, direcciones de correo o, como en este caso, URI), tienes el módulo Regexp::Common donde podrás encontrarlas ya prefabricadas:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use 5.010;
  2. use Regexp::Common;
  3.  
  4. my $re = $RE{URI}{HTTP}{-keep};
  5. say "la expresión regular es: $re";
  6.  
  7. for my $uri (@uris) {
  8.   if (my @parts = $uri =~ $re) {
  9.     say "$uri ==> $parts[6]";
  10.   }
  11. }
  12.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680

Re: Expresión regular extraer directorios de los URL

Notapor seguridadenmimail » 2011-09-13 10:21 @473

Muchas Gracias por la ayuda.
Saludos.
seguridadenmimail
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2011-08-30 19:28 @853


Volver a Básico

¿Quién está conectado?

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