Página 2 de 3

NotaPublicado: 2007-10-05 11:36 @525
por joss
Yo pensaba que si hacías esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$comando =~ s/ /+/g;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

quitabas el valor que le habías asignado a $comando cuando el <STDIN>.

Bueno la cosa está así... la búsqueda me la hace bien... Pero hay algo que falla y es que si encuentra la palabra lo que hace es imprimirte el código fuente de la página, no el párrafo. Y vamos que el código HTML es algo como esto.

Sintáxis: [ Descargar ] [ Ocultar ]
  1. hola me llamo pepito.<p> 


Vamos, que el script si está buscando la palabra 'hola', tiene que imprimir todo lo que viene después hasta encontrar un <p>.

NotaPublicado: 2007-10-05 13:18 @595
por kidd
En ese caso entonces necesitas otro regexp, algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$doc = get ($host . $comando);

    if ( $doc =~ m/ Web(.*?)\<p\>/mosix ) {
        print "EXISTE - $1\n";
    }
    else {
        print "NO EXISTE\n";
    }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2007-10-05 13:33 @606
por joss
Ahora me imprime bien, pero cuando la palabra no existe me imprime :

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
EXISTE - as">

------------------------

Un trozo del código fuente

------------------------
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Se supone que si no existe tendría que decir "NO EXISTE"

NotaPublicado: 2007-10-05 15:24 @683
por explorer
Si sale por "EXISTE", es que existe al menos una palabra "web".

Por lo que veo... alguna palabra que acaba en "...webas".

NotaPublicado: 2007-10-05 16:53 @745
por kidd
Tiene razón explorer, eso lo podrías solucionar usando límites de palabras en tu expresión regular:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$doc =~ m/\bWeb\b(.*?)\<p\>/mosix
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2007-10-06 05:00 @250
por joss
Teníais razón. Miré el código fuente de la página y me encontré la palabra terminada en 'as', por eso mismo no me funcionaba, pero ahora con '\b' en el if, ya me solucionó el problema.

Gracias.

NotaPublicado: 2007-10-06 12:49 @576
por later
Hola soy nuevo por aquí, y ya que está abierto este tema quiero preguntar sobre una duda que yo tengo.

Imaginemos que mediante la búsqueda que dice joss, encuentra la palabra.

E imprime todo lo que le sigue, hasta encontrar un <p> y en ese párrafo está por ejemplo este texto:

Web 'hola.pepe'

imprimiría lo que sigue después de Web: 'hola.pepe'. Pues yo quiero que dos variables guarden las palabra que hay entre unas comillas y separadas por un punto. Ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$palabra1 = "hola";
$palabra2 = "pepe";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2007-10-06 13:25 @600
por explorer
Bienvenido a los foros de Perl en Español, later.

Creo que es así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
($palabra1, $palabra2) = $doc =~ m/Web.*?\'(.*?)\.(.*?)\'/simo;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Con esto capturamos una vez. Podríamos quitar la palabra 'ancla' si sabemos que la combinación comilla-palabra-punto-palabra-comilla no se da en más lugares (es independiente de Web). Los capturadores (.*?) se podrían sustituir por (\w+) en el caso de que las palabras a capturar estuvieran formadas por caracteres alfanuméricos normales.

Vamos, que podría también ser así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
($palabra1, $palabra2) = $doc =~ m/\'(\w+)\.(\w+)\'/simo;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2007-10-06 13:53 @620
por later
Me funcionó con.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting

($palabra1, $palabra2) = $doc =~ m/\'(\w+)\.(\w+)\'/simo;

 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Gracias Explorer.

NotaPublicado: 2007-10-12 13:39 @610
por joss
Ahora lo estoy probando con el módulo LWP::UserAgent;

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request;

my $host=$ARGV[0];
my $comando=$ARGV[1];


my $ua = LWP::UserAgent->new;


$ua->agent("Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");

my $url = get ($host . $comando);


my $req = HTTP::Request->new(GET => $doc);
my $response = $ua->request($req);
my $doc = $response->content();

if ( $doc =~ m/\bColumna?\b(.*?)\<\/font>/mosix) {
   
print "EXITO";
}
else
{
print "Fallo";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Pero obtengo este resultado:

Código: Seleccionar todo
Undefined subroutine &main::get called at C:\Documents and Settings\User\Escritorio\x.pl line 15.