Re: regexp_replace double quote - Mailing list pgsql-general

From Михаил
Subject Re: regexp_replace double quote
Date
Msg-id CALSKcLQ_WcOBX2yxuQrmoMxz+oKyEzvSUW3GysJGK73D+CVPNA@mail.gmail.com
Whole thread Raw
In response to Re: regexp_replace double quote  (hubert depesz lubaczewski <depesz@depesz.com>)
List pgsql-general
Thank you!

2016-08-15 18:36 GMT+05:00, hubert depesz lubaczewski <depesz@depesz.com>:
> On Mon, Aug 15, 2016 at 06:27:06PM +0500, Михаил wrote:
>> I need to escape double quotes only:
>> test=# select regexp_replace('"""{Performer,"Boomwacker ""a""
>> Recording""}"""', '([^"])"{2}([^"])', '\1\"\2', 'g');
>>                  regexp_replace
>> -------------------------------------------------
>>  """{Performer,"Boomwacker \"a"" Recording\"}"""
>>
>> This is unexpected result.
>>
>> But when added one symbol to ""a"" the result is right:
>> test=# select regexp_replace('"""{Performer,"Boomwacker ""a1""
>> Recording""}"""', '([^"])"{2}([^"])', '\1\"\2', 'g');
>>                   regexp_replace
>> --------------------------------------------------
>>  """{Performer,"Boomwacker \"a1\" Recording\"}"""
>
> This is because when finding first "", "a" that is afterwards get
> assigned to \2. and thus is already "used", and can't be part of
> match for the second "".
>
> What will solve the problem is to use lookahead, like:
> $ select regexp_replace('"""{Performer,"Boomwacker ""a"" Recording""}"""',
> '([^"])"{2}(?=[^"])', '\1\"', 'g');
>                  regexp_replace
> -------------------------------------------------
>  """{Performer,"Boomwacker \"a\" Recording\"}"""
> (1 row)
>
> because then the part inside (?=...) is not "used", and can be used for
> next
> match.
>
> Not sure if I'm clear, but hopefully you'll understand what I'm trying to
> explain :)
>
> Best regards,
>
> depesz
>
>


--
---
Regards,

Mikhail


pgsql-general by date:

Previous
From: Pete Fuller
Date:
Subject: Re: 9.2 to 9.5 pg_upgrade losing data
Next
From: "Yelai, Ramkumar"
Date:
Subject: Re: pgbasebackup is failing after truncate