[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.