Mysql
 sql >> Datenbank >  >> RDS >> Mysql

3 Möglichkeiten zu erkennen, ob ein String mit einem regulären Ausdruck in MySQL übereinstimmt

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.