[Perl] regexp
Salvador Ortiz Garcia
sog@msg.com.mx
11 Jul 2002 20:13:58 -0500
On Tue, 2002-07-09 at 21:26, sondrobe wrote:
> Gente:
> estoy ocn un problemita con un script que quiero hacer, resulta que
> tengo unos datos en un texto separado por ";", la cosa es que en uno de l=
os
> atributos de la tabla -sin que me haya dado cuenta- estuvieron cargando
> datos y cuando separaban los mismos en vez de hacerlo con "," lo hac=EDa =
con
> ";" y yo ahora estoy con un problema que que al querer usar la funci=F3n =
split
> de perl a algunos registros me los separa bien mientras que otros, por lo
> dicho anteriormente, tienen m=E1s registros. Por si mi redacci=F3n es un =
tanto
> escasa un ejemplo del problema es este:
>=20
> Gonzalo;Aguirre;23;27198259;"Chubut 1495;Barrio Trapiche"
> Lito;Cruz;43;1392334;"Una Calle 33;Barrio un_barrio"
Las cadenas entrecomilladas tienen algunas sutilezas (p.e. \") lo que
complica el asunto, pero la soluci=F3n rapida ya est=E1 incluida en perl:
use Text::PerseWords;
...
@campos =3D parse_line(';',0,$linea);
Ahora que si quieres con una regexp:
@campos =3D ();
push(@campos, $+) while $linea =3D~ m{
"([^"\\]*(?:\\.[^"\\]*)*)";? # Entrecomillado clasico
| ([^;]+);? # Otros
| ; # Por si las moscas
}gx;
"Mastering regular expressions" de O'Reilly es lectura obligada.
Saludos.
Salvador Ortiz.