Kategorien:

Zeichenfolgenfunktionen (reguläre Ausdrücke)

REGEXP_LIKE

Führt einen Vergleich aus, um festzustellen, ob eine Zeichenfolge mit einem angegebenen Muster übereinstimmt. Beide Eingaben müssen Textausdrücke sein.

REGEXP_LIKE ähnelt der Funktion LIKE, bietet jedoch erweiterte reguläre POSIX-Ausdrücke anstelle von SQL LIKE-Mustersyntax. REGEXP_LIKE unterstützt komplexere Abgleichsbedingungen als LIKE.

Tipp

Sie können den Suchoptimierungsdienst verwenden, um die Leistung von Abfragen zu verbessern, die diese Funktion aufrufen. Weitere Details dazu finden Sie unter Suchoptimierungsdienst.

Aliasse:

RLIKE (1. Syntax)

Syntax

REGEXP_LIKE( <subject> , <pattern> [ , <parameters> ] )
Copy

Argumente

Benötigt:

subject

Die Zeichenfolge, nach der gesucht werden soll.

pattern

Abzugleichendes Muster.

Richtlinien zur Angabe von Mustern finden Sie unter Zeichenfolgenfunktionen (reguläre Ausdrücke).

Optional:

parameters

Zeichenfolge aus einem oder mehreren Zeichen, in der die Parameter angegeben sind, die zur Suche nach Übereinstimmungen verwendet werden. Unterstützte Werte:

Parameter

Beschreibung

c

Abgleich, bei dem zwischen Groß- und Kleinschreibung unterschieden wird

i

Abgleich ohne Berücksichtigung der Groß-/Kleinschreibung

m

Mehrzeiliger Modus.

e

Untergeordnete Übereinstimmungen extrahieren

s

POSIX-Platzhalterzeichen . im einzeiligen Modus stimmt mit \n überein

Standard: c

Weitere Informationen dazu finden Sie unter Angeben der Parameter für reguläre Ausdrücke.

Rückgabewerte

Gibt einen BOOLEAN-Wert oder NULL zurück.

  • Gibt TRUE zurück, wenn es eine Übereinstimmung gibt.

  • Gibt FALSE zurück, wenn es keine Übereinstimmung gibt.

  • Gibt NULL zurück, wenn ein Argument NULL ist.

Nutzungshinweise

Sortierungsdetails

Arguments with collation specifications currently aren’t supported.

Beispiele

Die folgenden Beispiele verwenden die Funktion REGEXP_LIKE.

Weitere Beispiele für reguläre Ausdrücke finden Sie unter REGEXP.

Ausführen grundlegender Abfragen mit regulären Ausdrücken für Zeichenfolgen

Erstellen Sie eine Tabelle mit den Namen der Städte:

CREATE OR REPLACE TABLE cities(city VARCHAR(20));

INSERT INTO cities VALUES
  ('Sacramento'),
  ('San Francisco'),
  ('San Luis Obispo'),
  ('San Jose'),
  ('Santa Barbara'),
  ('Palo Alto'),
  (NULL);
Copy

Sie können .* als Platzhalter verwenden, um so viele Zeichen wie möglich abzugleichen. Das folgende Beispiel entspricht dem Muster Fran an einer beliebigen Stelle im Zeichenfolgenwert:

SELECT * FROM cities WHERE REGEXP_LIKE(city, '.*Fran.*');
Copy
+---------------+
| CITY          |
|---------------|
| San Francisco |
+---------------+

Im folgenden Beispiel wird der i-Parameter verwendet, ohne dass die Groß- und Kleinschreibung berücksichtigt wird:

SELECT * FROM cities WHERE REGEXP_LIKE(city, '.*fran.*', 'i');
Copy
+---------------+
| CITY          |
|---------------|
| San Francisco |
+---------------+

Um ein Muster zu finden, das mit dem Anfang eines Zeichenfolgenwerts übereinstimmt, führen Sie eine Abfrage aus, die einen Platzhalter verwendet:

SELECT * FROM cities WHERE REGEXP_LIKE(city, 'san.*', 'i');
Copy
+-----------------+
| CITY            |
|-----------------|
| San Francisco   |
| San Luis Obispo |
| San Jose        |
| Santa Barbara   |
+-----------------+

Um eine Abfrage unter Berücksichtigung der Groß-/Kleinschreibung mit einem Platzhalter auszuführen, lassen Sie den i-Parameter weg:

SELECT * FROM cities WHERE REGEXP_LIKE(city, 'san.*');
Copy
+------+
| CITY |
|------|
+------+

Sie können das \w+-Metazeichen verwenden, um ein Wort abzugleichen, und das \s-Metazeichen, um ein Leerzeichen, wie ein Leerzeichen oder einen Tabulator, abzugleichen. Die folgende Abfrage sucht nach den Werten, die ein Wort enthalten, gefolgt von einem Leerzeichen, gefolgt von einem Wort:

SELECT * FROM cities WHERE REGEXP_LIKE(city, '\\w+\\s\\w+');
Copy
+---------------+
| CITY          |
|---------------|
| San Francisco |
| San Jose      |
| Santa Barbara |
| Palo Alto     |
+---------------+

Die Ausgabe für die Abfrage enthält nicht San Luis Obispo, da dieser Wert drei Wörter mit einem Leerzeichen zwischen dem ersten und zweiten Wort enthält, anstatt nur zwei Wörter mit einem Leerzeichen dazwischen.

In einem regulären Ausdruck können Sie oft ein Großbuchstaben-Metazeichen verwenden, um die Bedeutung eines Kleinbuchstaben-Metazeichens zu negieren. Führen Sie zum Beispiel eine Abfrage aus, die nach Werten sucht, die kein Leerzeichen zwischen zwei Wörtern enthalten, indem Sie das \S-Metazeichen verwenden:

SELECT * FROM cities WHERE REGEXP_LIKE(city, '\\w+\\S\\w+');
Copy
+------------+
| CITY       |
|------------|
| Sacramento |
+------------+

Ausführen von Abfragen mit regulären Ausdrücken für Zeichenfolgen mit Sonderzeichen

Die Beispiele in diesem Abschnitt suchen nach Werten mit Sonderzeichen, d. h. anderen Zeichen als a-z, A-Z, Unterstrich („_“) oder Dezimalziffern.

Um nach einem Metazeichen zu suchen, können Sie das Metazeichen mit Escapezeichen versehen. Weitere Informationen dazu finden Sie unter Angeben von regulären Ausdrücken in Zeichenfolgenkonstante in einfachen Anführungszeichen.

Erstellen Sie eine Tabelle, und fügen Sie dann einige Werte mit Sonderzeichen ein:

CREATE OR REPLACE TABLE regex_special_characters(v VARCHAR(20));

INSERT INTO regex_special_characters VALUES
  ('Snow'),
  ('Sn.ow'),
  ('Sn@ow'),
  ('Sn$ow'),
  ('Sn\\ow');
Copy

Der erste eingefügte Wert enthält keine Sonderzeichen.

Fragen Sie die Tabelle ab, um die Daten anzuzeigen:

SELECT * FROM regex_special_characters;
Copy
+-------+
| V     |
|-------|
| Snow  |
| Sn.ow |
| Sn@ow |
| Sn$ow |
| Sn\ow |
+-------+

Sie können nach einem beliebigen Sonderzeichen suchen, indem Sie die Perl-Backslash-Sequenz \W verwenden, die nach Zeichen sucht, die keine „Wort“-Zeichen sind. Die folgende Abfrage sucht zum Beispiel nach den Werten in der Tabelle, die Sonderzeichen enthalten:

SELECT *
  FROM regex_special_characters
  WHERE REGEXP_LIKE(v, '.*\\W.*');
Copy
+-------+
| V     |
|-------|
| Sn.ow |
| Sn@ow |
| Sn$ow |
| Sn\ow |
+-------+

Für die Suche nach Metazeichen in einer Konstante in einfachen Anführungszeichen müssen Sie das Metazeichen mit zwei Backslashes als Escapezeichen versehen. Die folgende Abfrage sucht zum Beispiel nach den Werten, die das $-Metazeichen enthalten:

SELECT *
  FROM regex_special_characters
  WHERE REGEXP_LIKE(v, '.*\\$.*');
Copy
+-------+
| V     |
|-------|
| Sn$ow |
+-------+

Wenn Sie nach einem Backslash suchen, ist ein zusätzliches Backslash-Escapezeichen erforderlich. Die folgende Abfrage sucht zum Beispiel nach den Werten, die das \- oder das .-Metazeichen enthalten:

SELECT *
  FROM regex_special_characters
  WHERE REGEXP_LIKE(v, '.*(\\.|\\\\).*');
Copy
+-------+
| V     |
|-------|
| Sn.ow |
| Sn\ow |
+-------+