Re: Using functions in regexp replace captures - Mailing list pgsql-general

From David G. Johnston
Subject Re: Using functions in regexp replace captures
Date
Msg-id CAKFQuwYsX_=oNa6RSLhtkE10fk-Z1v8MwAFzJ9ChvKQzhJNeHQ@mail.gmail.com
Whole thread Raw
In response to Using functions in regexp replace captures  (Tim Uckun <timuckun@gmail.com>)
Responses Re: Using functions in regexp replace captures  ("David G. Johnston" <david.g.johnston@gmail.com>)
List 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 by date:

Previous
From: Tim Uckun
Date:
Subject: Using functions in regexp replace captures
Next
From: "David G. Johnston"
Date:
Subject: Re: Using functions in regexp replace captures