Re: Regexp confusion
От | Alvaro Herrera |
---|---|
Тема | Re: Regexp confusion |
Дата | |
Msg-id | 20091009233713.GI5303@alvh.no-ip.org обсуждение исходный текст |
Ответ на | Regexp confusion (Doug Gorley <doug.gorley@gmail.com>) |
Ответы |
Re: Regexp confusion
Re: Regexp confusion |
Список | pgsql-general |
Doug Gorley escribió: > Trying to match some numbers, and I'm having some regexp problems. > I've boiled it down to the following: > > /* (1) */ select '3.14' similar to E'^\\d+\\.\\d+$'; -- true > /* (2) */ select '3.14' similar to E'^\\d+(\\.\\d+)$'; -- true > /* (3) */ select '3.14' similar to E'^\\d+(\\.\\d+)*$'; -- true > /* (4) */ select '3.14' similar to E'^\\d+(\\.\\d+)?$'; -- false > /* (5) */ select '3.14' similar to E'^\\d+(\\.\\d+)+$'; -- true > > So, based on (1) and (2), the pattern '\.\d+' occurs once. So why > does (4) return false? between (3), (4), and (5), it appears as > though the group is matching multiple times. I think the confusion is about what SIMILAR TO supports. ? it doesn't. See here: http://www.postgresql.org/docs/8.4/static/functions-matching.html#FUNCTIONS-SIMILARTO-REGEXP You probably want to use ~ instead of SIMILAR TO. (SIMILAR TO is a weird beast that the SQL committee came up with, vaguely based on regular expressions.) -- Alvaro Herrera http://www.CommandPrompt.com/ PostgreSQL Replication, Consulting, Custom Development, 24x7 support
В списке pgsql-general по дате отправления: