Re: Regex match not back-referencing in function
От | David Johnston |
---|---|
Тема | Re: Regex match not back-referencing in function |
Дата | |
Msg-id | 7AD29D0B-41C5-4806-923E-25E0F7AE59EE@yahoo.com обсуждение исходный текст |
Ответ на | Regex match not back-referencing in function (Thom Brown <thom@linux.com>) |
Список | pgsql-general |
On Feb 12, 2012, at 13:26, Thom Brown <thom@linux.com> wrote: > Hi, > > Could someone explain the following behaviour? > > SELECT regexp_replace(E'Hello & goodbye ',E'([&])','' || > ascii(E'\\1') || E';\\1'); > > This returns: > > regexp_replace > ------------------------ > Hello \& goodbye > (1 row) > > So it matched: > > SELECT chr(92); > chr > ----- > \ > (1 row) > > But notice that when I append the value it's supposed to have matched > to the end of the replacement value, it shows it should be '&'. > > Just to confirm: > > SELECT ascii('&'); > ascii > ------- > 38 > (1 row) > > So I'd expect the output of the original statement to be: > > regexp_replace > ------------------------ > Hello && goodbye > (1 row) > > What am I missing? > > -- > Thom > The "ASCII" function call is evaluated independently of, and before, the regexp_replace function call and so the E'\\1' hasno special meaning. It only has special meaning inside of the regexp_replace function. Try just evaluating ascii(E'\\1') by itself and confirm you get "92". David J.
В списке pgsql-general по дате отправления: