On Sat, Feb 27, 2021 at 08:51:27PM +0100, Joel Jacobson wrote:
> Hi,
> 
> Finding all matches in a string is convenient using regexp_matches() with the 
> 'g' flag.
> 
> But if instead wanting to know the start and end positions of the occurrences,
> one would have to first call regexp_matches(...,'g') to get all matches,
> and then iterate through the results and search using strpos() and length()
> repeatedly to find all start and end positions.
> 
> Assuming regexp_matches() internally already have knowledge of the 
> occurrences,
> maybe we could add a regexp_ranges() function that returns a two-dimensional 
> array,
> with all the [[start,end], ...] positions?

Maybe an int4multirange, which would fit unless I'm misunderstanding
g's meaning with respect to non-overlapping patterns, but that might
be a little too cute and not easy ever to extend.

Come to that, would a row structure that looked like

    (match, start, end)

be useful?

Best,
David.
-- 
David Fetter <david(at)fetter(dot)org> http://fetter.org/
Phone: +1 415 235 3778

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate


Reply via email to