regexp_matches and regexp_split are inconsistent - Mailing list pgsql-hackers

From Tom Lane
Subject regexp_matches and regexp_split are inconsistent
Date
Msg-id 17867.1186795534@sss.pgh.pa.us
Whole thread Raw
Responses Re: regexp_matches and regexp_split are inconsistent  ("Pavel Stehule" <pavel.stehule@gmail.com>)
Re: regexp_matches and regexp_split are inconsistent  (Stephan Szabo <sszabo@megazone.bigpanda.com>)
List pgsql-hackers
I noticed the following behavior in CVS HEAD, using a pattern that is
capable of matching no characters:

regression=# SELECT foo FROM regexp_matches('ab cde', $re$\s*$re$, 'g') AS foo; foo  
-------{""}{""}{" "}{""}{""}{""}{""}
(7 rows)

regression=# SELECT foo FROM regexp_split_to_table('ab cde', $re$\s*$re$) AS foo;foo 
-----abcde
(5 rows)

If you count carefully, you will see that regexp_matches() reports a
match of the pattern at the start of the string and at the end of the
string, and also just before 'c' (after the match to the single space).
However, regexp_split() disregards these "degenerate" matches of the
same pattern.

Is this what we want?  Arguably regexp_split is doing the most
reasonable thing for its intended usage, but the strict definition of
regexp matching seems to require what regexp_matches does.  I think
we need to either change one function to match the other, or else
document the inconsistency.

Thoughts?
        regards, tom lane


pgsql-hackers by date:

Previous
From: Gregory Stark
Date:
Subject: Re: Unexpected VACUUM FULL failure
Next
From: Bertram Scharpf
Date:
Subject: Re: Wrote a connect-by feature