Обсуждение: Using functions in regexp replace captures

Поиск
Список
Период
Сортировка

Using functions in regexp replace captures

От
Tim Uckun
Дата:
I want to do something like this

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

Is this possible at all?



Re: Using functions in regexp replace captures

От
"David G. Johnston"
Дата:
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.

Re: Using functions in regexp replace captures

От
"David G. Johnston"
Дата:
On Wednesday, August 4, 2021, David G. Johnston <david.g.johnston@gmail.com> wrote:

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.


“a” is actually probably going to be an array of text here, its evaluation producing the replacement string that f requires.  a is not the replacement string itself.

David J.