• Publicidad

expresiones regulares :s

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

expresiones regulares :s

Notapor xigr » 2006-02-15 10:47 @491

hola!

me he mirado los manuales del foro sobre expresiones regulares, pero no logro hacer lo siguiente, yo capturo parte de texto al hacer "sh version" en el router, capturo la línea concreta que me interesa, y debo sacar "Version 12.2(17a)". he probado con:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$session->print ('show version');
@salidaVER=$session->waitfor(String => "#");
##
$resul=$salidaVER[0];
@lineas = split(/\n/, $resul);

$ver = $lineas[2];
$ver2 = ($ver =~ m/, Version (.+),/);

print "versión del equipo " . $ver . "\n";
print "versión del equipo " . $ver2 . "\n";
$session->close;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4


¡¡pero el resultado es 1!!

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Accediendo al router 1: 172.21.216.197
versión del equipo IOS (tm) 7200 Software (C7200-DS-M), Version 12.2(17a), RELEASE SOFTWARE (fc1)
versión del equipo 1
FIN DEL SCRIPT
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
xigr
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2006-02-03 02:51 @160

Publicidad

Re: expresiones regulares :s

Notapor explorer » 2006-02-15 13:48 @616

Los paréntesis están un poco mal puestos :)
Código: Seleccionar todo
 ($ver2) = $ver =~ m/, Version (.+),/;

Explicación: $ver está siendo analizado (=~) por la expresión regular (m//). Dentro de ella tienes unos paréntesis de captura, así que el resultado ($1) saldrá como lista de valores (($1,$2,...)). Por esa razón ponemos $ver2 entre paréntesis, para indicar que es también una lista (aunque esté compuesta de un sólo elemento) y que los valores capturados serán asignados a cada variable de esa lista ($1 a $ver2).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2006-02-15 14:56 @664

Hola:

Para mi gusto quedaría más estilizado de la siguiente manera:

Código: Seleccionar todo
my $ver2;

    if($ver =~ m/\,\s+Version\s+([^,]+)/){
        $ver2 = $1;
    }



SALUDOS
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor xigr » 2006-02-16 01:50 @118

hola! muchas gracias a los dos!

no me queda muy claro esto de las expresiones, solo veo rallitas y letritas :s a ver si me releo todo el manual, voy descubriendo sobre la marcha jeje

muchas gracias!
iñaki
xigr
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2006-02-03 02:51 @160

Notapor kidd » 2006-02-16 10:15 @469

Hola:

A ver aquí te va la expresión explicada:

Código: Seleccionar todo
my $ver2;

    if($ver =~ m/
                \,      #buscamos una coma
                \s+     #seguida de uno o más espacios
                Version #seguidos de la palabra Version
                \s+     #uno o más espacios
                (       #empezamos paréntesis de captura
                [^,]+   #capturamos uno o más caracteres que no sean comas
                )       #cerramos paréntesis de captura
                /x){
        $ver2 = $1;
    }
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Re: expresiones regulares :s

Notapor adrolmar » 2009-09-11 07:49 @367

Hola,

si tengo varias condiciones con expresiones regulares, así...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ($linea =~ /^[mM]anufact\w*:\s*([\d\w\s,]+)/){
    $var = $1;
}
if ($linea =~ /^CSQ:\s*(\d\d)/){
    $var2 = $1;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


quiero evitar que tanto $var como $var2 tengan el mismo valor (como me ocurre), puesto que cada expresión regular valida una cosa distinta.

¡Gracias!
adrolmar
 

Re: expresiones regulares :s

Notapor explorer » 2009-09-11 08:11 @382

Cambia el segundo if() por elsif().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: expresiones regulares :s

Notapor adrolmar » 2009-09-11 09:09 @423

Hola de nuevo,
poniendo elsif() en lugar de otro if() las variables me cogen el mismo valor (el del primer $1).

Edito: Solucionado: ¡¡¡ había un espacio entre = y ~ !!!

GRACIAS
adrolmar
 


Volver a Básico

¿Quién está conectado?

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