BUG #6057: regexp_replace & back references

Started by Marc Maminalmost 15 years ago2 messagesbugs
Jump to latest
#1Marc Mamin
marc@intershop.de

The following bug has been logged online:

Bug reference: 6057
Logged by: Marc Mamin
Email address: marc@intershop.de
PostgreSQL version: 9.0.4
Operating system: Windows
Description: regexp_replace & back references
Details:

select regexp_replace ('a','(a)','\\1'||substring('\\1',1,1)||'\\1','g')
= a\1
I'd expect a\1a as result.

More generally, I miss the avaibility to use back references as function
parameters. It is only possible with some operators (e.g. '\\1'||'\\1'),
probably depending on their lexical precedence. Any way to workaround this
limitation would be very helpful.

HTH,

Marc Mamin

#2Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Marc Mamin (#1)
Re: BUG #6057: regexp_replace & back references

Excerpts from Marc Mamin's message of mar jun 14 12:31:34 -0400 2011:

The following bug has been logged online:

Bug reference: 6057
Logged by: Marc Mamin
Email address: marc@intershop.de
PostgreSQL version: 9.0.4
Operating system: Windows
Description: regexp_replace & back references
Details:

select regexp_replace ('a','(a)','\\1'||substring('\\1',1,1)||'\\1','g')
= a\1
I'd expect a\1a as result.

Note that the substring returns a single character which is a literal \.
That \ escapes the \ in the final '\\1', which turns into the literal \
that you see in the result. The subsequent 1 is the leftover char from
the final '\\1'.

I think this is clearer if you set standard_conforming_strings to on.

--
Álvaro Herrera <alvherre@commandprompt.com>
The PostgreSQL Company - Command Prompt, Inc.
PostgreSQL Replication, Consulting, Custom Development, 24x7 support