[Programación] Re: [Programación] Re: [Programació n] Expreciones regulares III (con que " machea")

Nicolás Aimetti programacion@lugro.org.ar
Fri, 26 Aug 2005 10:42:00 +0000


Hola...
Respondo intercalado...

>>Suponiendo que se trate de una expresión regular
>>(expre) en perl (el \S 
>>hace que supongamos eso, aunque no estaría mal
>>aclarar un poco) la 
>>expresión
>>
>>(\S+) \((^[()])*)\)
>>
>>es incorrecta por el simple hecho de que el cuarto
>>paréntesis derecho 
>>')' no cierra con ningún izquierdo (tal como lo dice
>>el interprete de perl).
> 
> 
> Error de tipeado...
> 
> 
>>¿Que va a machear está expresión? absolutamente
>>todo.
> 
> 
> A la marosca... 
> 
> debe ser entonces equivalente el resultado...
> 
> /^From: (\S+) \(([^()]*)\)/ y...
> 
> /^From: (\S+) \((.*)\)/
> 
> Para la expresión...
Ah... ahora cambio bastante la cosa. Primero, el operador ^ entre 
corchetes sirve para negar lo que está dentro de los mismos...  O sea: 
[^()] machea todos los caracteres _NO_ pertenecientes al conjunto 
{'(',')'}.
Y no, para nada... no son las mismas expresiones. En la segunda $2 
machea todo lo que este entre los dos paréntesis, incluso otros 
paréntesis... en la primera $2 machea solo todos los caracteres entre 
los dos paréntesis distintos a los paréntesis. La primera por lo general 
termina haciendo lo que uno quiere hacer, la segunda no, aunque esto es 
relativo... De todas formas si uno no espera que haya paréntesis en el 
medio ambas andan bien.
Ejemplos...

#!/usr/bin/perl -w

while (<>) {
     print "1ra machea y \$2 es: <$2>\n" if /^From: (\S+) \(([^()]*)\)/ ;
     print "2da machea y \$2 es: <$2>\n" if /^From: (\S+) \((.*)\)/;
}

nick@~/code/perl:)$ ./foo.pl
From: hola (loco lindo)
1ra machea y $2 es: <loco lindo>
2da machea y $2 es: <loco lindo>
From: hola (loco () lindo)
2da machea y $2 es: <loco () lindo>
From: hola (loco ) lindo)
1ra machea y $2 es: <loco >
2da machea y $2 es: <loco ) lindo>
From: hola (loco ( lindo )
2da machea y $2 es: <loco ( lindo >


> From: sekinmor_en_yahoo.com.ar (Sergio Belkin)
> 
> Pues yo busco lo que se guarda en $2 que está entre
> los literales \( y \)
> 
> Enonces porque joracas se complica tanto el pdf
> "Master of..."?? además de no dar una explicación
> sencilla del tema...
> 
Eso yo no puedo responderlo...
> Uhmm... lo ensallaré si son equivalentes...
> 
No, no son equivalentes...


Saludos,
         Nicolás.