REGEXP_REPLACE, zastąpienie jednej z grup przechwytujących inną

REGEXP_REPLACE, zastąpienie jednej z grup przechwytujących inną
mpaw
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 531
0

Dzień dobry.

Mam takie problem: chciałbym zastąpić wartość jednej z grup przechwytujących inną wartością, w MariaDB, przy użyciu REGEXP_REPLACE.

Mam taki przykładowy kod:

Kopiuj
SELECT REGEXP_REPLACE('Czterdzieści [abc]fun{4}\fun{5}fun{6}[/abc] lat minęło','([^\\\\])(fun)','\\2');

Niestety, kod nie może działać dobrze. Wiem, że grupę można wskazać przez \N, gdzie N to numer od 1 do 9, oznaczający numer grupy przechwytującej. Chciałbym zastąpić tylko jedną z grup innym tekstem. Nie chcę manipulować kolejnością grup, tylko zastąpić, w tym przypadku, wszystkie wystąpienia fun bez backslasha, na fun z backslashem, z tym, żeby nie modyfikować fun, które ma już backslash (w tym wypadku, środkowe (drugie)).

Czy jest jakis sposób aby to osiągnąć?

Tutaj kod w testerze dla regexp https://regex101.com/r/gSHXe1/1/

Proszę o pomoc.
Dziękuję
Michał

RA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 374
1

Zmień na coś takiego:

Kopiuj
([^\\])fun
'\1\fun'

W oraclu to działa:

Kopiuj
REGEXP_REPLACE('Czterdzieści [abc]fun{4}\fun{5}fun{6}[/abc] lat minęło','([^\\])fun', '\1\fun') 
mpaw
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 531
0

Bardzo dziękuję! ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.