regexp_replace() (Funktion)
Die Funktion regexp_replace() ersetzt jede Instanz eines Musters in der Eingabe durch den Wert im varchar- oder nvarchar-Ersatz.
Syntax
varchar = regexp_replace(varchar input, varchar pattern, varchar
replacement [, int start_pos [, int reference]] [, varchar flags]);
nvarchar = regexp_replace(nvarchar input, nvarchar pattern, nvarchar
replacement [, int start_pos [, int reference]] [, varchar flags]);
Der Wert " input gibt den varchar- oder nvarchar-Wert an, gegen den der reguläre Ausdruck verarbeitet wird.
Der Wert " pattern gibt den regulären Ausdruck an. Sie finden eine Beschreibung für die Vorgehensweise, wie Muster für Perl-kompatible reguläre Ausdrücke (PCRE – Perl-Compatible Regular
Expression) für Unicode-Daten angegeben werden, in jeder PCRE-Dokumentation oder in Quellen im Web.
Der Wert " replacement gibt den Wert an, der für jede Instanz des Musters ersetzt werden soll. Innerhalb der Ersetzungszeichenfolge können Sie Rückverweise verwenden, um auf Ausdrücke innerhalb einer Erfassungsgruppe zu passen, wie in Rückverweise beschrieben.
Der Wert " start_pos gibt die Zeichenposition in der Musterzeichenkette an, an der die Ersetzung beginnen soll. Der Standardwert ist 1.
Der Wert " reference gibt die Instanz des zu ersetzenden Musters an. Der Referenzwert ist standardmäßig 0; dadurch werden alle Instanzen des Musters durch den Ersatzwert ersetzt. Geben Sie zum Ersetzen nur einer bestimmten Instanz des Musters einen Wert größer als
0 an (1 entspricht der ersten Referenz,
2 der zweiten Referenz, 3 der dritten Referenz usw.).
Eine Beschreibung des Werts " flags finden Sie unter dem Argument "flags".
Rückgabe
Die Funktion ersetzt jede Instanz eines Musters in der Eingabe durch den Wert im varchar- oder nvarchar-Ersatz.Beispiel
select regexp_replace('Red Yellow Blue Red Green
Blue','Red','Orange');
REGEXP_REPLACE
--------------------------------------
Orange Yellow Blue Orange Green Blue
(1 row)
select regexp_replace('Red Yellow Blue Red Green Blue','Red','Orange', 1, 2);
REGEXP_REPLACE
-----------------------------------
Red Yellow Blue Orange Green Blue
(1 row)
Rückwärtsreferenzen
Sie können Rückwärtsreferenzen verwenden, um eine Übereinstimmung mit
Ausdrücken innerhalb einer Erfassungsgruppe zu finden. Eine Erfassungsgruppe ist ein regulärer Ausdruck, der
in runde Klammern () eingeschlossen ist. Die Rückverweise haben die Form " \number, wobei die Zahl 0 bis einschließlich 9 ist, und beziehen sich auf die entsprechende Instanz der Erfassungsgruppe.
Im folgenden Beispiel wird die erste Instanz einer Erfassungsgruppe durch die Ersetzungszeichenfolge ersetzt:
select regexp_replace('Red Yellow Blue Red Green Blue','(Red)',
'Colors: \1', 1, 1);
REGEXP_REPLACE
----------------------------------------
Colors: Red Yellow Blue Red Green Blue
(1 row) Wenn Sie in der Ersetzungszeichenfolge einen normalen Schrägstrich (/) angeben möchten, müssen Sie den Schrägstrich wie im folgenden Beispiel gezeigt mit einem einleitenden Schrägstrich als Escapezeichen versehen:
select regexp_replace('Red Yellow Blue Red Green Blue','(Red)',
'\\Colors: \1', 1, 1);
REGEXP_REPLACE
-----------------------------------------
\Colors: Red Yellow Blue Red Green Blue
(1 row) Es gibt eine teilweise Unterstützung für Ersetzungszeichenfolgen, in denen eine Kombination aus
Rückwärtsreferenzen und positiven Lookbehinds verwendet wird. Die Funktion unterstützt keine Übereinstimmungen, bei denen die Lookbehind-Zeichenfolge vor dem Wert
für Startposition auftritt. Im folgenden Beispiel wird das Muster des regulären Ausdrucks für die Suche nach " Red gefolgt von " Yellow mit einer Startposition von 4 verwendet. In diesem Fall ändert die Übereinstimmung die zweite Instanz von " Red Yellow in der Eingabezeichenfolge, obwohl die erste " Yellow an Position 5 (nach der Startposition) erscheint, weil die erste Instanz der Lookbehind-Zeichenfolge " Red vor der Startposition 4 erscheint.
select regexp_replace('Red Yellow Red Green Red Yellow Red Blue Red Yellow',
'(?<=Red )(Yellow)','INSERT \1',4,1);
REGEXP_REPLACE
------------------------------------------------------------
Red Yellow Red Green Red INSERT Yellow Red Blue Red Yellow
(1 row)