Literal '-' in regular expression bracket sets

Поиск
Список
Период
Сортировка
От Steve
Тема Literal '-' in regular expression bracket sets
Дата
Msg-id 20020905144103.A30720@infinity.rhythm.cx
обсуждение исходный текст
Ответы Re: Literal '-' in regular expression bracket sets  (Stephan Szabo <sszabo@megazone23.bigpanda.com>)
Re: Literal '-' in regular expression bracket sets  (Tom Lane <tgl@sss.pgh.pa.us>)
Список 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

В списке pgsql-general по дате отправления:

Предыдущее
От: Brian Hirt
Дата:
Сообщение: Re: postgresql does seqscan instead of using an existing
Следующее
От: Mario Weilguni
Дата:
Сообщение: Re: PostgreSQL vs MySQL : strange results on insertion