Re: BUG #1687: Regular expression problem (II)
| От | Tom Lane |
|---|---|
| Тема | Re: BUG #1687: Regular expression problem (II) |
| Дата | |
| Msg-id | 12383.1117552388@sss.pgh.pa.us обсуждение |
| Ответ на | BUG #1687: Regular expression problem (II) ("Halley Pacheco de Oliveira" <halleypo@yahoo.com.br>) |
| Список | pgsql-bugs |
"Halley Pacheco de Oliveira" <halleypo@yahoo.com.br> writes:
> Maybe it would be easier to see the the problem I'm having with regular
> expressions this way:
> Maybe it would be easier to see the the problem I'm having with regular
> expressions this way:
> SELECT '192.168.0.15' SIMILAR TO
> '([[:alnum:]_-]+).([[:alnum:]_-]+).([[:alnum:]_]+)';
> ?column?
> ----------
> t
> SELECT '192.168.0.15' SIMILAR TO '([\\w-]+).([\\w-]+).([\\w]+)';
> ?column?
> ----------
> f
SIMILAR TO patterns are required to match the whole data string; so
the above fails because it only matches 3 digit groups not 4. The
others all fail because you put explicit ^ and $ into them.
The reason the first one works is that you put _ into the pattern, which
means "match anything" in SIMILAR-TO land; so it gets translated to "."
to be fed to the regular regexp engine. (Arguably that should not
happen inside square brackets, but similar_escape() isn't smart enough
to distinguish.) And that makes it possible for one of the
[]-expressions to match two digit groups plus the intervening dot.
regards, tom lane
В списке pgsql-bugs по дате отправления: