Página 1 de 1

Guardar parte de la cadena

NotaPublicado: 2008-09-23 09:49 @450
por later
Hola, buenas, tengo una duda que no resuelvo.

Yo tengo por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
hola $manu;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y yo quiero guardar en una variable "$manu" pero la cadena puede variar y nosotros no la sabemos, por ejemplo, "$alex". ¿Cómo podría hacer para guardar la cadena que me interesa sea cual sea en una variable?

Después tengo otros tipos de sintaxis por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
hola ("$manu");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y el problema se complica por que la sintaxis también puede variar, es decir que no siempre empezara por "$" y terminará en ";", pero ojo, porque yo lo quiero guardar con la "$" incluida.

Yo pensé hacer algo como:

* Si localizamos la palabra hola (if)
* busca $ y termina en un carácter no alfabético (como por ejemplo ";" o "comillas dobles");
* guarda la cadena en una variable en este caso la cadena sería "$manu".

NotaPublicado: 2008-09-23 09:59 @457
por kidd
Hola,

Podemos usar una expresión regular usando tus reglas:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $string = 'hola $manu"';

$string =~ m/
             hola  #Si localizamos la palabra hola
             \s    #Seguido de un espacio
             (     #Iniciamos paréntesis de captura
              \$   #El carácter de $
              \w+  #Uno o más carácteres alfabeticos
             )     #Cerramos paréntesis de captura
              \W   #Seguido de un carácter NO alfabetico
            /xi;


print "$1\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Esto imprimirá correctamente:

Código: Seleccionar todo
$manu


Saludos

NotaPublicado: 2008-09-23 10:05 @462
por explorer
Esta es mi solución:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

while (<DATA>) {
    chomp;

    if ( /hola.*?(\$?\w+)/simo ) {
        print "$_\t=> $1\n";
    }
}

__DATA__
hola $manu1;
hola ("$manu2");
hola manu3;
hola $manu4
hola ("manu5");
hola ("$manu6")
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sale:
Código: Seleccionar todo
hola $manu1;    => $manu1
hola ("$manu2");        => $manu2
hola manu3;     => manu3
hola $manu4     => $manu4
hola ("manu5"); => manu5
hola ("$manu6") => $manu6