BUG #13538: REGEX non-greedy is working incorrectly (and also greedy matches fail if non-greedy is present)

From: christian_maechler(at)hotmail(dot)com
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #13538: REGEX non-greedy is working incorrectly (and also greedy matches fail if non-greedy is present)
Date: 2015-08-03 22:44:50
Message-ID: 20150803224450.1115.8803@wrigleys.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 13538
Logged by: Chris Mächler
Email address: christian_maechler(at)hotmail(dot)com
PostgreSQL version: 9.3.0
Operating system: ?
Description:

Here is an example to verify and reproduce the error (extract a number and
the things before and after it with 3 groups):

'(.*)([+-]?[0-9]*\.[0-9]+)(.*)'

Using regexü_matches this will produce an undesirable result (only one digit
in group 2), but everything behaves correctly, the third group matches until
the end.

'(.*?)([+-]?[0-9]*\.[0-9]+)(.*)'

If we change the first group to non-greedy to fix this, then the bug
appears: the third group becomes non-greedy too (it shouldn't!) and
therefore it is always empty instead of matching until the end of the line.
Also the first group is empty (should match from start!), it should find a
match at start position, whether it is non-greedy or not and not look ahead
if the non-greedy group can be reduced if starting to match at the next
index. Both are wrong behaviors.

(the workaround is anchoring, but the behavior of the regex is still wrong)

link: http://sqlfiddle.com/#!15/f0f14/14

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message David G. Johnston 2015-08-04 05:50:06 Re: BUG #13538: REGEX non-greedy is working incorrectly (and also greedy matches fail if non-greedy is present)
Previous Message tumelolilele 2015-08-03 20:11:35 BUG #13537: Npgsql bug