MySQL verfügt über eine Reihe von Funktionen und Operatoren, mit denen wir Operationen mit regulären Ausdrücken (Regex) ausführen können. Dieser Artikel stellt zwei Operatoren und eine Funktion vor, mit denen wir herausfinden können, ob eine Zeichenfolge mit einem regulären Ausdruck übereinstimmt, der durch ein bestimmtes Muster angegeben ist.
Diese Regex-Funktionen und -Operatoren sind:
REGEXP_LIKE()
REGEXP
RLIKE
Diese sind im Grunde alle gleichwertig, da die Operatoren (die zweiten beiden) beide Synonyme der Funktion (der ersten) sind. In jedem Fall können Sie unten Beispiele für alle drei in Aktion sehen.
Der REGEXP_LIKE()
Funktion
Schauen wir uns zunächst die Funktion an. Hier ist ein Beispiel für die Ausführung einer Regex-Suche mit REGEXP_LIKE()
Funktion:
SELECT REGEXP_LIKE('Car', '^C') AS 'Match', REGEXP_LIKE('Bar', '^C') AS 'No Match';
Ergebnis:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
Die erste Zeichenfolge stimmt überein (weil sie mit C beginnt ), also ist das Ergebnis 1
. Die zweite Zeichenfolge stimmt nicht überein und daher ist das Ergebnis 0
.
Diese Funktion kann jedoch viel nützlicher sein, als einfach eine 1
zurückzugeben oder 0
. Beispielsweise kann es zu WHERE
hinzugefügt werden -Klausel beim Abfragen einer Datenbank. In diesem Fall können wir eine Liste von Zeilen erhalten, die eine Übereinstimmung mit dem Muster enthalten.
Hier ist ein Beispiel:
SELECT AlbumId, AlbumName FROM Albums WHERE REGEXP_LIKE(AlbumName, '^Power');
Ergebnis:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Hier ist die vollständige Tabelle:
SELECT AlbumId, AlbumName FROM Albums;
Ergebnis:
+---------+--------------------------+ | AlbumId | AlbumName | +---------+--------------------------+ | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | +---------+--------------------------+
Der REGEXP
Betreiber
So machen Sie dasselbe mit REGEXP
Betreiber:
SELECT 'Car' REGEXP '^C' AS 'Match', 'Bar' REGEXP '^C' AS 'No Match';
Ergebnis:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
Und das Datenbankbeispiel:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName REGEXP '^Power';
Ergebnis:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Sie können auch NOT REGEXP
verwenden um das gegenteilige Ergebnis zurückzugeben.
Das RLIKE
Betreiber
Und hier wird RLIKE
verwendet :
SELECT 'Car' RLIKE '^C' AS 'Match', 'Bar' RLIKE '^C' AS 'No Match';
Ergebnis:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
Und das Datenbankbeispiel:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName RLIKE '^Power';
Ergebnis:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
In diesem Fall habe ich einfach REGEXP
ausgetauscht für RLIKE
und den Rest des Codes in Ruhe gelassen.
Sie können auch NOT RLIKE
verwenden um das gegenteilige Ergebnis zurückzugeben.
Weitere REGEX-Funktionen
MySQL enthält auch einige andere Regex-Funktionen und -Operatoren. Drei davon sind unten aufgeführt. Technisch gesehen könnten Sie die ersten beiden auch verwenden, um zu „erkennen“, ob ein String mit einem Regex-Muster übereinstimmt (in diesem Fall sollte dieser Artikel vielleicht den Titel „5 Möglichkeiten zum Erkennen, ob ein String mit einem regulären Ausdruck in MySQL übereinstimmt“ statt nur „ 3 Wege…“).
Wie auch immer, hier sind drei weitere Regex-Funktionen:
- Sie können den
REGEXP_INSTR()
verwenden Funktion, um den Anfangsindex einer Teilzeichenfolge zurückzugeben, die dem regulären Ausdrucksmuster entspricht. - Der
REGEXP_SUBSTR()
Die Funktion gibt den Teilstring zurück, der mit dem angegebenen regulären Ausdrucksmuster übereinstimmt. - Und der
REGEXP_REPLACE()
Die Funktion ersetzt Vorkommen des Teilstrings innerhalb eines Strings, der mit dem angegebenen regulären Ausdrucksmuster übereinstimmt.