Re: BUG #15046: non-greedy ignored - Mailing list pgsql-bugs

From David G. Johnston
Subject Re: BUG #15046: non-greedy ignored
Date
Msg-id CAKFQuwY-QAB7Gi+2q_m3SMFM4SQnXbDuk=vAERg0KL04LeiSiA@mail.gmail.com
Whole thread Raw
In response to BUG #15046: non-greedy ignored  (PG Bug reporting form <noreply@postgresql.org>)
Responses Re: BUG #15046: non-greedy ignored
List pgsql-bugs
On Friday, February 2, 2018, PG Bug reporting form <noreply@postgresql.org> wrote:
The following bug has been logged on the website:

Bug reference:      15046
Logged by:          Bob Gailer
Email address:      bgailer@gmail.com
PostgreSQL version: 10.1
Operating system:   windows 10
Description:

I start psql; enter:

postgres=# select regexp_replace('a(d)s(e)f', '\(.*?\)', '', 'g');
 regexp_replace
----------------
 asf
(1 row)

Works as expected. Then I add |q to the pattern, and the .*? becomes
greedy!

postgres=# select regexp_replace('a(d)s(e)f', '\(.*?\)|q', '', 'g');
 regexp_replace
----------------
 af
(1 row)


This seems to be explained by the final greediness rule:


  • An RE consisting of two or more branches connected by the | operator is always greedy.


    David J.

pgsql-bugs by date:

Previous
From: PG Bug reporting form
Date:
Subject: BUG #15046: non-greedy ignored
Next
From: Tom Lane
Date:
Subject: Re: BUG #15046: non-greedy ignored