Re: Using functions in regexp replace captures

Поиск
Список
Период
Сортировка
От David G. Johnston
Тема Re: Using functions in regexp replace captures
Дата
Msg-id CAKFQuwYsX_=oNa6RSLhtkE10fk-Z1v8MwAFzJ9ChvKQzhJNeHQ@mail.gmail.com
обсуждение исходный текст
Ответ на Using functions in regexp replace captures  (Tim Uckun <timuckun@gmail.com>)
Ответы Re: Using functions in regexp replace captures  ("David G. Johnston" <david.g.johnston@gmail.com>)
Список pgsql-general
On Wednesday, August 4, 2021, Tim Uckun <timuckun@gmail.com> wrote:
I want to do something like this

SELECT REGEXP_REPLACE('some_string','(.*)
(.*)',some_function_that_returns_string('\2',' \1'));

Is this possible at all?


Generally I’d say yes, it is possible to combine multiple subqueries together to get the desired end result.  Using regexp_match and performing the conversion on its result is fairly trivial.  In theory then write regexp_replace like above but ignore the capture groups and just stick in the column into,which you saved the computed value as the direct and complete replacement.

But no, you cannot directly write:  f(x, y, g(a)) where a is the replacement string because you don’t know what a is when the inner function g is evaluated first.  You need:  f(x, y, g(h(x, y))) where h is the matching function, g is the transform, f is the replacement of the third argument into the x source text, and y is the pattern.  I presume the y is going to be the same value here but that isn’t required.

David J.

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

Предыдущее
От: Tim Uckun
Дата:
Сообщение: Using functions in regexp replace captures
Следующее
От: "David G. Johnston"
Дата:
Сообщение: Re: Using functions in regexp replace captures