• Publicidad

Expresión regular

¿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

Notapor later » 2008-01-18 07:59 @374

Tengo subido un archivo .txt en mi servidor con un estructura ip:puerto.

EJ: 80.80.80.80:8000

Estoy intentando hacer un código que me recoja la IP y el puerto por separado y me las guarde en una variable.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use IO::Socket;
use LWP::UserAgent;
use HTTP::Request;

$host="HOST";
chomp $host;

$final=$host;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => $final);
$doc = $ua->request($req)->as_string;

($ip, $puerto) = $doc =~ m/\'(\w+)\:(\w+)\'/simo;

print "$ip:$puerto";
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Pero no me funciona.
later
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2007-10-06 12:42 @570

Publicidad

Notapor explorer » 2008-01-18 11:19 @513

No hace falta que 'escapes' el carácter ':'.

En la expresión regular escapas unas comillas, pero no has dicho nada de que en tu fichero estén.

La combinación \w es para aquello que parece que forma parte de una palabra... por lo que un '.' NO forma parte de una palabra.

Prueba con /([\w.]+):(\w+)/.

Otra forma es usando split():

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    ($ip,$puerto) = split ":", $doc;

 
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 later » 2008-01-18 17:45 @781

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use IO::Socket;
use LWP::UserAgent;
use HTTP::Request;

$host="HOST";
chomp $host;

$final=$host;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => $final);
$doc = $ua->request($req)->as_string;

($ip, $puerto) = $doc =~ m/([\w.]+):(\w+)/simo;

print "$ip:$puerto";
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Sorprendéntemente la salida de este código es la hora del servidor.
Ej.: 12:43

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use IO::Socket;
use LWP::UserAgent;
use HTTP::Request;

$host="HOST";
chomp $host;

$final=$host;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => $final);
$doc = $ua->request($req)->as_string;

($ip,$puerto) = split ":", $doc;

print "$ip:$puerto";
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Salida:
Código: Seleccionar todo
HTTP/1.1 200 OK
Connection: close
Date
later
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2007-10-06 12:42 @570

Notapor explorer » 2008-01-18 21:11 @924

Con este programa sí que me funciona.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -l
use LWP::UserAgent;

my $host     = 'HOST';
my $ua       = LWP::UserAgent->new;
my $response = $ua->get("http://$host/ip.txt");

if ($response->is_success) {
    $doc = $response->content;
}
else {
    die $response->status_line;
}

($ip, $puerto) = $doc =~ m/([\w.]+):(\w+)/simo;

print "$ip|$puerto";

 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Es que creo que estás recuperando la petición, no el propio contenido del fichero.

Fíjate que en este ejemplo solo es necesario usar el módulo LWP::UserAgent. El contenido del fichero recuperado desde Internet lo obtenemos con content() sobre la respuesta. Tu estás usando la petición (request()).
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


Volver a Básico

¿Quién está conectado?

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

cron