Обсуждение: BUG #19104: Does regexp_substr function support non-greedy matching?

Поиск
Список
Период
Сортировка

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

От
PG Bug reporting form
Дата:
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.


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

От
Tom Lane
Дата:
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