Re: [E] Re: Regexp_replace bug / does not terminate on long strings

Поиск
Список
Период
Сортировка
От Francisco Olarte
Тема Re: [E] Re: Regexp_replace bug / does not terminate on long strings
Дата
Msg-id CA+bJJby_0WEtTAYy0aFRQtCdiEjbG77kVsuL7+rJ=N+DUfMFLQ@mail.gmail.com
обсуждение исходный текст
Ответ на Re: [E] Re: Regexp_replace bug / does not terminate on long strings  ("Markhof, Ingolf" <ingolf.markhof@de.verizon.com>)
Ответы Re: [E] Re: Regexp_replace bug / does not terminate on long strings  ("Markhof, Ingolf" <ingolf.markhof@de.verizon.com>)
Список pgsql-general
Ingolf:

On Mon, Aug 23, 2021 at 2:39 PM Markhof, Ingolf
<ingolf.markhof@de.verizon.com> wrote:
> Yes, When I use (\1)? instead of (\1)+, the expression is evaluated quickly, but it doesn't return what I want. Once
aword is written, it is not subject to matching again. i.e. 
> select regexp_replace( --> remove double entries
>   'one,one,one,two,two,three,three',
>       '([^,]+)(,\1)?($|,)',
>         '\1\3',
>         'g'
>    ) as res;
>
...
> Honestly, this behaviour seems to be incorrect for me. Once the system replaces the first two 'one,one,' by a single
'one,',I'd expect to match this replaced one 'one,' with the next 'one,' following, replacing these two by another,
single'one,', again... 

I think your expectation is misguided. All the regexp engines I've
used do it this way, when asked to match "g"lobally they do
non-overlapping matches, they do not substitute and recurse with the
modified string.

Also, your way opens the door to run-away or infinite loops (
rr('a','a','aa','g') or rr('a','a','a','g'), not to speak of
r('x','','','g') ). Even a misguided r(str, '_+','_','g'), used
sometimes to normalize space runs and similar things, can go into a
loop.

Francisco Olarte.



В списке pgsql-general по дате отправления:

Предыдущее
От: Oliver Kohll
Дата:
Сообщение: Re: Incremental Materialized Views
Следующее
От: "Markhof, Ingolf"
Дата:
Сообщение: Re: [E] Re: Regexp_replace bug / does not terminate on long strings