Re: duda de expresiones regulares

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

In response to

Browse pgsql-es-ayuda by date

  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