BUG #19104: Does regexp_substr function support non-greedy matching?

Started by PG Bug reporting form5 months ago2 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 19104
Logged by: lx zou
Email address: zoulx1982@163.com
PostgreSQL version: 18.0
Operating system: Linux
Description:

When i use regexp_substr to process some text file, i found regexp_substr
does not support non-greedy match.
But fix the case again, i found maybe it support non-greedy, i don't hear
why the two cases get different results? or is it a regexp_substr bug ?
following is the test case:

ostgres=# SELECT regexp_substr('d.cook', '[a-z]+\.[a-z]{2,}?');
regexp_substr
---------------
d.cook
(1 row)

postgres=# SELECT regexp_substr('d.cook', '[a-z]\.[a-z]{2,}?');
regexp_substr
---------------
d.co
(1 row)

postgres=# select version();
version
--------------------------------------------------------------------------------
PostgreSQL 19devel on x86_64-pc-linux-gnu, compiled by gcc (GCC) 9.1.0,
64-bit
(1 row)

postgres=#

Thanks for your reading.

Regards.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: PG Bug reporting form (#1)
Re: BUG #19104: Does regexp_substr function support non-greedy matching?

PG Bug reporting form <noreply@postgresql.org> writes:

When i use regexp_substr to process some text file, i found regexp_substr
does not support non-greedy match.

Sure it does. But the details of the behavior are different from
Perl's engine in cases where you have both greedy and non-greedy
quantifiers (as your example does). Read the greediness rules here:

https://www.postgresql.org/docs/current/functions-matching.html#POSIX-MATCHING-RULES

regards, tom lane