Thread: Regex Character-Class

Regex Character-Class

From
Henry
Date:
Greets,

I must be missing something here:

SELECT '1.1.1.1' ~ E'^\d+';

returns FALSE, when I would expect TRUE, as for:

SELECT '1.1.1.1'  ~ E'^[[:digit:]]+';

ie, '[[:digit:]]'  !=  '\d'

In config, "regex_flavor = advanced".

Any ideas?

Thanks
Henry


Attachment

Re: Regex Character-Class

From
"A. Kretschmer"
Date:
In response to Henry :
> Greets,
>
> I must be missing something here:
>
> SELECT '1.1.1.1' ~ E'^\d+';
>
> returns FALSE, when I would expect TRUE, as for:

Try:

test=*# SELECT '1.1.1.1' ~ E'^\\d+';
 ?column?
----------
 t
(1 row)



Regards, Andreas
--
Andreas Kretschmer
Kontakt:  Heynitz: 035242/47150,   D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID:   0x3FFF606C, privat 0x7F4584DA   http://wwwkeys.de.pgp.net

Re: Regex Character-Class

From
Thomas Pundt
Date:
Henry schrieb:
> I must be missing something here:
>
> SELECT '1.1.1.1' ~ E'^\d+';
>
> returns FALSE, when I would expect TRUE, as for:
>
> SELECT '1.1.1.1'  ~ E'^[[:digit:]]+';
>
> ie, '[[:digit:]]'  !=  '\d'
>
> In config, "regex_flavor = advanced".
>
> Any ideas?

Yes; you have to escape the backslash character:

=> SELECT '1.1.1.1' ~ E'^\\d+';
  ?column?
----------
  t
(1 row)


See the documentation for this
(http://www.postgresql.org/docs/8.3/interactive/functions-matching.html):

   Note:  Remember that the backslash (\) already has a special meaning
   in PostgreSQL string literals. To write a pattern constant that
   contains a backslash, you must write two backslashes in the statement,
   assuming escape string syntax is used (see Section 4.1.2.1).

Ciao,
Thomas

Re: Regex Character-Class

From
Henry
Date:
Quoting "A. Kretschmer" <andreas.kretschmer@schollglas.com>:
> Try:
>
> test=*# SELECT '1.1.1.1' ~ E'^\\d+';

Ag, of course, thanks Andreas.

Cheers
Henry


Attachment