Thread: Using functions in regexp replace captures

Using functions in regexp replace captures

From
Tim Uckun
Date:
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

From
"David G. Johnston"
Date:
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

From
"David G. Johnston"
Date:
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.