BUG #13538: REGEX non-greedy is working incorrectly (and also greedy matches fail if non-greedy is present)
От | christian_maechler@hotmail.com |
---|---|
Тема | BUG #13538: REGEX non-greedy is working incorrectly (and also greedy matches fail if non-greedy is present) |
Дата | |
Msg-id | 20150803224450.1115.8803@wrigleys.postgresql.org обсуждение исходный текст |
Ответы |
Re: BUG #13538: REGEX non-greedy is working incorrectly (and
also greedy matches fail if non-greedy is present)
|
Список | pgsql-bugs |
The following bug has been logged on the website: Bug reference: 13538 Logged by: Chris Mächler Email address: christian_maechler@hotmail.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
В списке pgsql-bugs по дате отправления: