Thread: BUG #1686: Regular expression problem

BUG #1686: Regular expression problem

From
"Halley Pacheco de Oliveira"
Date:
The following bug has been logged online:

Bug reference:      1686
Logged by:          Halley Pacheco de Oliveira
Email address:      halleypo@yahoo.com.br
PostgreSQL version: 7.4 and 8.0
Operating system:   Linux and Windows
Description:        Regular expression problem
Details:

SELECT '200.222.197.219' SIMILAR TO
'([[:alnum:]_]+).([[:alnum:]_]+).([[:alnum:]_]+)';

 ?column?
----------
 t
(1 row)

SELECT '200.222.197.219' ~
'([[:alnum:]_]+)\\.([[:alnum:]_]+)\\.([[:alnum:]_]+)';

 ?column?
----------
 t
(1 row)

SELECT '200.222.197.219' SIMILAR TO '([\\w-]+).([\\w-]+).([\\w]+)';

 ?column?
----------
 f
(1 row)

SELECT '200.222.197.219' ~ '([\\w-]+)\\.([\\w-]+)\\.([\\w]+)';

 ?column?
----------
 t
(1 row)

Why does the third query gives a different output? It is not exactly the
same as the first query?

Re: BUG #1686: Regular expression problem

From
Alvaro Herrera
Date:
On Sat, May 28, 2005 at 11:22:12PM +0100, Halley Pacheco de Oliveira wrote:

> [third query:]
>
> SELECT '200.222.197.219' SIMILAR TO '([\\w-]+).([\\w-]+).([\\w]+)';
>
>  ?column?
> ----------
>  f
> (1 row)
>
> Why does the third query gives a different output? It is not exactly the
> same as the first query?

Hmm, you are aware that SIMILAR TO is defined by the SQL standard, so
the rules are not exactly the same as POSIX regexes, right?  I guess the
\w character class (a Perl-ism, I think) is not defined for SIMILAR TO.

(Note that our ~ regexes are powered by code of Tcl's heritage, so you
could check Tcl's manual on regexes.)


Anyway I wonder why you are trying to use regular expressions when you
could be using the INET type; maybe the INET input function if it came
to it.

--
Alvaro Herrera (<alvherre[a]surnet.cl>)
"Limítate a mirar... y algun día veras"

Re: BUG #1686: Regular expression problem

From
Bruno Wolff III
Date:
On Tue, May 31, 2005 at 11:15:23 -0400,
  Alvaro Herrera <alvherre@surnet.cl> wrote:
>
> (Note that our ~ regexes are powered by code of Tcl's heritage, so you
> could check Tcl's manual on regexes.)

Aren't they based directly on Henry Spencer's code?

Re: BUG #1686: Regular expression problem

From
Tom Lane
Date:
Bruno Wolff III <bruno@wolff.to> writes:
> On Tue, May 31, 2005 at 11:15:23 -0400,
>   Alvaro Herrera <alvherre@surnet.cl> wrote:
>> (Note that our ~ regexes are powered by code of Tcl's heritage, so you
>> could check Tcl's manual on regexes.)

> Aren't they based directly on Henry Spencer's code?

It *is* Henry's code, lock stock and barrel, inherited by way of Tcl.
I'm not sure how much Henry is involved in maintaining the Tcl regex
engine anymore, but he's certainly the original author.

            regards, tom lane