Oracle
 sql >> Datenbank >  >> RDS >> Oracle

REGEXP_REPLACE()-Funktion in Oracle

In Oracle das REGEXP_REPLACE() Funktion ersetzt Vorkommen des Teilstrings innerhalb eines Strings, der mit dem angegebenen regulären Ausdrucksmuster übereinstimmt.

Es erweitert die Funktionalität von REPLACE() funktionieren, indem sie uns erlauben, reguläre Ausdrucksmuster zu verwenden.

Syntax

Die Syntax lautet wie folgt:

REGEXP_REPLACE ( source_char, pattern
                 [, replace_string
                    [, position
                       [, occurrence
                          [, match_param ]
                       ]
                    ]
                 ]
               ) 

Wo:

  • source_char ist ein Zeichenausdruck, der als Suchwert dient.
  • pattern ist der reguläre Ausdruck.
  • replace_string ist die Ersetzungszeichenfolge.
  • position ist eine positive Ganzzahl, die angibt, wo die Suche beginnen soll. Der Standardwert ist 1 , was bedeutet, beginnen Sie die Suche beim ersten Zeichen.
  • occurrence ist eine nicht negative Ganzzahl, die angibt, welches Vorkommen ersetzt werden soll. Der Standardwert ist 0 , was bedeutet, dass alle Vorkommen ersetzt werden.
  • match_param können Sie das standardmäßige Übereinstimmungsverhalten der Funktion ändern. Beispielsweise können Sie die Groß-/Kleinschreibung angeben, wie mit mehreren Zeilen und Leerzeichen umgegangen wird usw. Dieses Argument funktioniert genauso wie bei Verwendung mit REGEXP_COUNT() Funktion. Weitere Informationen finden Sie in der Dokumentation von Oracle.

Beispiel

Hier ist ein einfaches Beispiel für die Verwendung von REGEXP_REPLACE() bei Oracle:

SELECT 
    REGEXP_REPLACE('Cats and dogs', 'd.g', 'bird')
FROM DUAL; 

Ergebnis:

Katzen und Vögel

In diesem Fall gibt es eine Übereinstimmung und die Teilzeichenfolge wird durch die Ersatzzeichenfolge ersetzt.

Reguläre Ausdrücke können sehr leistungsfähig sein, und dieses Beispiel verwendet ein sehr einfaches Beispiel. Um REGEXP_REPLACE() zu verwenden Um effektiv zu sein, müssen Sie das richtige Muster kennen, um das gewünschte Ergebnis zu erzielen.

Keine Übereinstimmung

Hier ist ein Beispiel, bei dem es keine Übereinstimmung gibt:

SELECT REGEXP_REPLACE('Cats and dogs', 't.g', 'bird'); 

Ergebnis:

+---------------------------------------------- --+| REGEXP_REPLACE('Katzen und Hunde', 't.g', 'Vogel') |+------------------------------ ------------------+| Katzen und Hunde |+--------------------------------------------- ---+

Es gibt keine Übereinstimmung, daher wird die ursprüngliche Zeichenfolge unverändert zurückgegeben.

Mehrere Übereinstimmungen

Hier ist ein Beispiel mit mehreren Übereinstimmungen:

SELECT 
    REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird')
FROM DUAL; 

Ergebnis:

Mein Vogel mag andere Vögel

Sie können jedoch bei Bedarf angeben, welches Vorkommen ersetzt werden soll:

SELECT 
REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird', 1, 2)
FROM DUAL; 

Ergebnis:

Mein Hund mag andere Vögel

Beachten Sie, dass ich hier zwei Argumente hinzugefügt habe – 1 und 2 . Die 1 gibt den Aufenthaltsort in der Zeichenfolge an, um die Suche zu starten (in diesem Fall beim ersten Zeichen). Die 2 gibt an, welches Vorkommen ersetzt werden soll. In diesem Fall wird das zweite Vorkommen ersetzt.

Folgendes passiert, wenn ich die Suche nach dem ersten Vorkommen starte:

SELECT 
REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird', 7, 2)
FROM DUAL; 

Ergebnis:

Mein Hund mag andere Hunde

In diesem Fall wird die Zeichenfolge nicht aktualisiert, da es nach der Startposition nur noch ein weiteres Vorkommen gibt.

Wenn ich das letzte Argument in 1 ändere , dann wird es wie angegeben aktualisiert (weil es das erste Vorkommen nach der angegebenen Startposition ist):

SELECT 
REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird', 7, 1)
FROM DUAL; 

Ergebnis:

Mein Hund mag andere Vögel

Und falls Sie sich fragen, 0 gibt alle Vorkommen an:

SELECT REGEXP_REPLACE(
    'My dog likes big dogs and small dogs', 
    'd.g', 
    'bird', 1, 0
    )
FROM DUAL; 

Ergebnis:

Mein Vogel mag große und kleine Vögel

Aber es respektiert immer noch jede angegebene Startposition:

SELECT REGEXP_REPLACE(
    'My dog likes big dogs and small dogs', 
    'd.g', 
    'bird', 7, 0
    )
FROM DUAL; 

Ergebnis:

Mein Hund mag große und kleine Vögel

Groß-/Kleinschreibung

Der REGEXP_REPLACE() Die Funktion folgt den Sortierungsbestimmungs- und Ableitungsregeln von Oracle, die die zu verwendende Sortierung definieren, wenn die Zeichenfolge mit dem Muster abgeglichen wird.

Mit dem optionalen sechsten Argument können Sie jedoch explizit die Groß-/Kleinschreibung angeben. Wenn Sie dies tun, überschreibt es alle Groß- und Kleinschreibung oder Akzente der bestimmten Kollatierung.

Sie können i angeben für Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung und c für Groß- und Kleinschreibung.

Hier ist ein Beispiel:

SELECT 
    REGEXP_REPLACE('My Cats', 'c.t', 'dog', 1, 0) AS "Default",
    REGEXP_REPLACE('My Cats', 'c.t', 'dog', 1, 0, 'i') AS "Case Insensitive",
    REGEXP_REPLACE('My Cats', 'c.t', 'dog', 1, 0, 'c') AS "Case Sensitive"
FROM DUAL; 

Ergebnis:

 Groß-/Kleinschreibung wird nicht beachtet Groß-/Kleinschreibung beachten _________ ___________________ _________________ Meine Katzen Meine Hunde Meine Katzen 

Aus diesen Ergebnissen geht hervor, dass bei meiner Standardsortierung zwischen Groß- und Kleinschreibung unterschieden wird. Die anderen beiden Strings wurden zu einem case-insensitiven bzw. case-sensitiven Matching gezwungen.

Null-Argumente

Übergabe von null ergibt null für die meisten Argumente, mit Ausnahme des zweiten und sechsten Arguments:

SET NULL 'null';
SELECT 
    REGEXP_REPLACE(null, 'c.t', 'dog', 1, 0, 'i') AS "1",
    REGEXP_REPLACE('Cat', null, 'dog', 1, 0, 'i') AS "2",
    REGEXP_REPLACE('Cat', 'c.t', null, 1, 0, 'i') AS "3",
    REGEXP_REPLACE('Cat', 'c.t', 'dog', null, 0, 'i') AS "4",
    REGEXP_REPLACE('Cat', 'c.t', 'dog', 1, null, 'i') AS "5",
    REGEXP_REPLACE('Cat', 'c.t', 'dog', 1, 0, null) AS "6"
FROM DUAL; 

Ergebnis:

 1 2 3 4 5 6 _______ _____ _______ ______ _______ ______ null Katze null null null Katze 

Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn null tritt als Ergebnis eines SQL SELECT auf Erklärung.

Sie können jedoch SET NULL verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null zurückgegeben werden soll.

Falsche Anzahl von Argumenten

Wenn der Funktion keine oder zu wenige Argumente übergeben werden, führt dies zu einem Fehler:

SELECT REGEXP_REPLACE()
FROM DUAL; 

Ergebnis:

Fehler ab Zeile:1 im Befehl -SELECT REGEXP_REPLACE()FROM DUALError at Command Line:1 Column:8Error report -SQL Error:ORA-00938:not enough arguments for function00938. 00000 - "Nicht genügend Argumente für Funktion"*Ursache:*Aktion:

Dasselbe gilt, wenn zu viele Argumente übergeben werden:

SELECT REGEXP_REPLACE('Cat', 'c.t', 'dog', 1, 0, 'i', 'oops')
FROM DUAL; 

Ergebnis:

Fehler ab Zeile:1 im Befehl -SELECT REGEXP_REPLACE('Cat', 'c.t', 'dog', 1, 0, 'i', 'oops')FROM DUALError at Command Line:1 Column:8Fehlerbericht -SQL-Fehler:ORA-00939:zu viele Argumente für Funktion00939. 00000 - "zu viele Argumente für Funktion"*Ursache:*Aktion:

Weitere Informationen

Der REGEXP_REPLACE() -Funktion (sowie die andere Implementierung regulärer Ausdrücke von Oracle) entspricht dem IEEE Portable Operating System Interface (POSIX)-Standard für reguläre Ausdrücke und den Unicode-Richtlinien für reguläre Ausdrücke des Unicode-Konsortiums.

Weitere Informationen und Beispiele für REGEXP_REPLACE() finden Sie in der Oracle-Dokumentation Funktion.