Literal dash in regular expression brackets

From: Steve <steve(at)infinity(dot)rhythm(dot)cx>
To: pgsql-general(at)postgresql(dot)org
Subject: Literal dash in regular expression brackets
Date: 2002-09-05 18:39:26
Message-ID: 20020905143926.A30702@infinity.rhythm.cx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


I'm trying to place a literal '-' in a bracketed character set in a regular
expression for a check constraint. I am currently escaping it with a '\',
however, it still winds up in the table definition as a non-literal dash and
is interpreted as a character range. For instance:

CREATE TABLE retest
(
hostname VARCHAR(100) CHECK (hostname ~ '^[a-zA-Z0-9\-\.]+$' )
);

works (in the psql utility). Then if I do

INSERT INTO retest(hostname) VALUES ('asdf.com');

psql says

ERROR: Invalid regular expression: invalid character range in [ ]

If I look at the table definition, the regex reads as '^[a-zA-Z0-9-.]+$'. So
how do I put a literal '-' in the bracket set? Backslashing doesn't seem to
work. Is the '.' being interpreted too? The '.' is supposed to be a literal
'.' as well.

Thanks

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Mario Weilguni 2002-09-05 18:39:55 Re: PostgreSQL vs MySQL : strange results on insertion
Previous Message Oleg Bartunov 2002-09-05 18:38:11 Re: "...integer[] references..." = error