On Monday, May 20, 2024, jian he <
jian.universality@gmail.com> wrote:
hi.
https://www.postgresql.org/docs/current/functions-matching.html#FUNCTIONS-POSIX-REGEXP
If there is a match,
the source string is returned with the replacement string substituted
for the matching substring.
This happens regardless of the presence of parentheses.
The replacement string can contain \n,
where n is 1 through 9, to indicate that the source substring matching
the n'th parenthesized subexpression of the pattern should be
inserted, and it can contain \& to indicate that the substring
matching the entire pattern should be inserted.
Then if the replacement text contains “\n” expressions those are replaced with text captured from the corresponding parentheses group.
<<
i think it explained example like:
SELECT regexp_replace('foobarbaz', 'b(..)', 'X\1Y', 'g');
global - find two matches to process.
foobarbaz
fooX\1YX\1Y
fooXarYXazY
but it does not seem to explain cases like:
SELECT regexp_replace('foobarbaz', 'b(..)', 'X\2Y', 'g');
foobarbaz
fooX\2YX\2Y
fooX{empty string, no second capture group}YX{empty}Y
fooXYXY
The docs are correct, though I suppose being explicit that a missing capture group results in an empty string substitution instead of an error is probably warranted.
David J.