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