Обсуждение: postgresql regular expr bug?

Поиск
Список
Период
Сортировка

postgresql regular expr bug?

От
Pavel Stehule
Дата:
Hello

can somebody explain this behave?

postgres=# select '10' ~ e'^\\d+$';?column?
----------t
(1 row)
ok

postgres=# select '10' ~ '[0..9]+$';?column?
----------t
(1 row)
ok

postgres=# select '10' ~ '^[0..9]+$';?column?
----------f
(1 row)
?????
postgres=# select version();                                             version
---------------------------------------------------------------------------------------------------PostgreSQL 8.3.7 on
i686-pc-linux-gnu,compiled by GCC gcc (GCC)
 
4.4.0 20090506 (Red Hat 4.4.0-4)
(1 row)

tested on fedora 11

Regards
Pavel Stehule


Re: postgresql regular expr bug?

От
"Stephen J. Butler"
Дата:
On Sun, Jun 14, 2009 at 1:15 AM, Pavel Stehule<pavel.stehule@gmail.com> wrote:
> can somebody explain this behave?
>
> postgres=# select '10' ~ e'^\\d+$';
>  ?column?
> ----------
>  t
> (1 row)
> ok
>
> postgres=# select '10' ~ '[0..9]+$';
>  ?column?
> ----------
>  t
> (1 row)
> ok
>
> postgres=# select '10' ~ '^[0..9]+$';
>  ?column?
> ----------
>  f
> (1 row)

Try '^[0-9]+$'.


Re: postgresql regular expr bug?

От
hubert depesz lubaczewski
Дата:
On Sun, Jun 14, 2009 at 08:15:55AM +0200, Pavel Stehule wrote:
> postgres=# select '10' ~ '[0..9]+$';
>  ?column?
> ----------
>  t
> (1 row)

regexp '[0..9]+$' tests is given strings containst at the end substring
containing only characters "0", "9" and ".".
and yes, it does - the last character is 0, so it matches.

> postgres=# select '10' ~ '^[0..9]+$';
>  ?column?
> ----------
>  f
> (1 row)

this regexp checks if whole string is built only with characters "0",
"9", and ".". and it is not - the first character is "1" which is not
the character list you provided.

basically ".." has no special meaning in regexps, especially within [] -
i.e. it is just a dot.

Best regards,

depesz

-- 
Linkedin: http://www.linkedin.com/in/depesz  /  blog: http://www.depesz.com/
jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007


Re: postgresql regular expr bug?

От
Pavel Stehule
Дата:
2009/6/14 hubert depesz lubaczewski <depesz@depesz.com>:
> On Sun, Jun 14, 2009 at 08:15:55AM +0200, Pavel Stehule wrote:
>> postgres=# select '10' ~ '[0..9]+$';
>>  ?column?
>> ----------
>>  t
>> (1 row)
>
> regexp '[0..9]+$' tests is given strings containst at the end substring
> containing only characters "0", "9" and ".".
> and yes, it does - the last character is 0, so it matches.
>
>> postgres=# select '10' ~ '^[0..9]+$';
>>  ?column?
>> ----------
>>  f
>> (1 row)
>
> this regexp checks if whole string is built only with characters "0",
> "9", and ".". and it is not - the first character is "1" which is not
> the character list you provided.
>
> basically ".." has no special meaning in regexps, especially within [] -
> i.e. it is just a dot.
>

my mistake

thank you

Pavel

> Best regards,
>
> depesz
>
> --
> Linkedin: http://www.linkedin.com/in/depesz  /  blog: http://www.depesz.com/
> jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007
>