Re: different result of regexp_instr than on Oracle

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: Gilles Darold <gillesdarold(at)gmail(dot)com>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: different result of regexp_instr than on Oracle
Date: 2026-09-18 09:06:13
Message-ID: CAFj8pRA3TXThpv-rn5Jqmnxj7swkbcBQx90CxM29Bj7w9omJCQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

pá 18. 9. 2026 v 9:57 odesílatel Gilles Darold <gillesdarold(at)gmail(dot)com>
napsal:

> Le 18/09/2026 à 07:21, Pavel Stehule a écrit :
> > Hi
> >
> > I got an error report for regexp_instr in Orafce.
> >
> > SELECT REGEXP_INSTR('ABC', 'A', 1, 1, 0, '', 1) AS SUBEXPR_1
> >
> > Oracle returns 0, Postgres 1.
> >
> > Because Orafce now share this functionality with Postgres, there
> > should be same problem
> >
> > Is this behaviour expected?
>
> Hi Pavel,
>
> That's a good catch. I have tested orafce with your commit 546ee72 it
> now works as expected for Oracle compatibility. About PostgreSQL
> regexp_instr() behavior, I think it is expected that it returns 1, per
> the documentation:
>
> "the subexpr is an integer indicating which subexpression is of
> interest: the result identifies the position of the substring matching
> that subexpression. Subexpressions are numbered in the order of their
> leading parentheses. When subexpr is omitted or zero, the result
> identifies the position of the whole match regardless of parenthesized
> subexpressions".
>
> When no capture group are defined in the pattern, there's an implicit
> capture group for the whole match when subexpr is 0 or 1.
>
> contrib_regression=# SELECT REGEXP_INSTR('ABC', 'B', 1, 1, 0, '', 0) AS
> SUBEXPR_0;
> subexpr_0
> -----------
> 2
>
> contrib_regression=# SELECT REGEXP_INSTR('ABC', 'B', 1, 1, 0, '', 1) AS
> SUBEXPR_1;
> subexpr_1
> -----------
> 2
>
> contrib_regression=# SELECT REGEXP_INSTR('ABC', 'B', 1, 1, 0, '', 2) AS
> SUBEXPR_2;
> subexpr_2
> -----------
> 0
>
>
> contrib_regression=# SELECT REGEXP_INSTR('ABC', 'B(C)', 1, 1, 0, '', 0)
> AS SUBEXPR_0;
> subexpr_0
> -----------
> 2
> (1 ligne)
>
> contrib_regression=# SELECT REGEXP_INSTR('ABC', 'B(C)', 1, 1, 0, '', 1)
> AS SUBEXPR_1;
> subexpr_1
> -----------
> 3
>
> Best regards,
> --
> Gilles
>
>
>
ok

thank you for explanation

Regards

Pavel

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Etsuro Fujita 2026-09-18 09:15:14 Re: [PG19][PATCH] Make postgres_fdw statistics import atomic
Previous Message shveta malik 2026-09-18 08:48:19 Re: Proposal: Conflict log history table for Logical Replication