Re: Manejo de strings en consulta

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Gustavo <gustavor(at)intercomgi(dot)net>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Manejo de strings en consulta
Date: 2008-01-18 12:51:56
Message-ID: 20080118125156.GC5326@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gustavo escribió:
> Alvaro, finalmente y gracias a tu ayuda pude hacer andar la consulta
>
> Escape los caracteres [ ] { } ( ) + y *
>
> La consulta quedó asi:
>
> SELECT E'C:\\Documents and Settings\\Gustav\\Escritorio\\Taller
> UML\\RealizarReserva\\DigActividades_RReserva.pdf'
> ~ ('^' || regexp_replace(full_path, E'([\\\\*.(){}+\\\[])', e'\\\\\\1',
> 'g')) from
> servicio.recurso;
>
> SI bien la pude hacer andar me quedo la duda sobre como se escapan los
> caracteres [ y ]. En el pattern a reemplazar tuve que agregar \\\[ para que
> funcionase. Si le agregaba 4 barras anda igual.Quedaron 3 corchetes. Me da
> mucha duda si estoy escapando bien estos caracteres y si va a funcionar
> correctamente. Si tienes alguna referencia sobre como trabajar el escapado
> de caracteres me sería de mucha utilidad

Quedaron 3 corchetes porque dos de ellos (los mas externos) especifican
que estas abriendo y cerrando una "character class". Observa que el ]
no se está escapando, porque no está indicado dentro de la clase de
caracteres. Probablemente deberías poner \\\[\\\]

El parentesis indica "capturar esto para referencia futura", y el \\1
indica "usar la primera cadena capturada por un parentesis".

Lo fastidioso de las \ es que Postgres usa las primeras para escapar
caracteres en el lexer, y las otras son para el motor de expresiones
regulares. O sea Postgres recibe

E'([\\\\*.(){}+\\\[])', e'\\\\\\1',

y le entrega al motor de regex

E'([\\*.(){}+\\[])', e'\\\1',

(hmm, creo).

Te recomiendo un libro sobre expresiones regulares llamado "Mastering
Regular Expressions", 3era ed., de Geoffrey Friedl. La sintaxis de
expresiones regulares de Postgres es la de Tcl.

Un programador que no sabe usar expresiones regulares es como un hombre
encadenado en una caverna que solo puede ver la realidad a traves de las
sombras que una fogata proyecta de ella en el fondo de la caverna.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2008-01-18 12:57:02 Re: www.postgresql.cl
Previous Message marcelo Cortez 2008-01-18 03:17:33 Re: www.postgresql.cl