From: | Miguel Rodríguez Penabad <penabad(at)gmail(dot)com> |
---|---|
To: | "Toni Casueps" <casueps(at)hotmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: duda de expresiones regulares |
Date: | 2008-01-31 12:02:32 |
Message-ID: | 95335e4e0801310402h5e391c2dyc9f3f283ef7d7059@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
El 31/01/08, Toni Casueps <casueps(at)hotmail(dot)com> escribió:
>
> No me funciona el operador ? en expresiones regulares. Se supone que el carácter anterior al signo ? puede aparecer o no en la cadena, pero cuando lo uso nunca casa la expresión regular. Por ejemplo:
>
> select 'ABC' similar to 'AB?C';
> select 'AC' similar to 'AB?C';
Según el manual:
http://www.postgresql.org/docs/8.2/static/functions-matching.html#FUNCTIONS-SIMILARTO-REGEXP
Notice that bounded repetition (? and {...}) are not provided, though
they exist in POSIX. Also, the dot (.) is not a metacharacter.
Es decir, que la interrogación se toma LITERALMENTE como el carácter '?'.
>
> Segun lo entiendo yo, eso significa que puede haber 'B' o no haberla, pero la comparacion devuelve False en ambas. En cambio sí funcionan:
>
> select 'ABC' similar to 'AB*C';
> select 'AC' similar to 'AB*C';
>
> Pero esta expresión regular casaría con 'ABBC', 'ABBBC', etc, y eso no me vale.
> ¿Puede ser un error de Postgres?
No, o al menos es el comportamiento documentado. Si quieres puedes usar
expresiones regulares POSIX:
select 'ABC' ~ 'AB?C';
o incluso
select 'ABC' ~ '^AB?C$';
Saludos
--
Miguel Rodríguez Penabad
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2008-01-31 12:07:43 | Re: El API pgsql en C |
Previous Message | Toni Casueps | 2008-01-31 11:51:11 | duda de expresiones regulares |