Der Operator REGEXP für reguläre Ausdrücke
Der Operator REGEXP (oder sein Synonym RLIKE) in MySQL wird zum Suchen und Verarbeiten von Stringdaten mit Hilfe von regulären Ausdrücken verwendet.
Der Operator ~ für reguläre Ausdrücke
Die Operatoren ~ und ~* in PostgreSQL werden zum Suchen und Verarbeiten von Stringdaten mit Hilfe von regulären Ausdrücken verwendet.
Reguläre Ausdrücke bieten mächtige Möglichkeiten für komplexe Suchmuster, die sich mit dem LIKE-Operator nur schwer umsetzen lassen.
Wann reguläre Ausdrücke statt LIKE einsetzen?
Der LIKE-Operator eignet sich gut für einfache Suchmuster wie das Finden von Strings, die mit bestimmten Zeichen beginnen oder enden bzw. bestimmte Teilstrings enthalten. Wenn du jedoch eine komplexere und flexiblere Suche brauchst — etwa nach mehreren Bedingungen oder mit Sonderzeichen und Bereichen — werden die Operatoren für reguläre Ausdrücke zu einem unverzichtbaren Werkzeug.
Wichtig ist: LIKE vergleicht den String mit dem gesamten Muster, während ein regulärer Ausdruck nach einer Übereinstimmung innerhalb des Strings sucht. Wenn du explizit den Anfang oder das Ende eines Strings prüfen willst, nutzt du die Sonderzeichen ^ und $.
Syntax regulärer Ausdrücke
MySQL 8.1... WHERE table_field REGEXP 'pattern';
Wobei pattern der reguläre Ausdruck ist, der das Suchmuster festlegt.
MySQL 8.1... WHERE table_field ~ 'pattern'; -- mit Berücksichtigung der Groß-/Kleinschreibung ... WHERE table_field ~* 'pattern'; -- ohne Berücksichtigung der Groß-/Kleinschreibung
Wobei pattern der reguläre Ausdruck ist, der das Suchmuster festlegt.
Wichtige Details
-
Groß-/Kleinschreibung
Standardmäßig sind reguläre Ausdrücke in MySQL nicht zwischen Groß- und Kleinschreibung unterscheidend. Zum Beispiel findet REGEXP 'abc' sowohl abc als auch Abc und ABC.
-
Sonderzeichen
Einige Zeichen haben in regulären Ausdrücken eine besondere Bedeutung und müssen escaped werden (zum Beispiel ., *, +, ?, [, ], (, ), {, }, |, \).
Zum Escapen solcher Zeichen verwendest du einen doppelten Backslash — \\.
-
Groß-/Kleinschreibung
Standardmäßig unterscheiden reguläre Ausdrücke in PostgreSQL zwischen Groß- und Kleinschreibung.
- Operator ~ — mit Berücksichtigung der Groß-/Kleinschreibung
- Operator ~* — ohne Berücksichtigung der Groß-/Kleinschreibung
-
Sonderzeichen
Einige Zeichen haben in regulären Ausdrücken eine besondere Bedeutung und müssen escaped werden (zum Beispiel ., *, +, ?, [, ], (, ), {, }, |, \).
Zum Escapen solcher Zeichen verwendest du einen einfachen Backslash — \.
Sonderzeichen und Konstrukte
Beispiele mit Erklärung
-
Hole alle Nutzer, deren Namen mit „John“ beginnen:
MySQL 8.1SELECT * FROM Users WHERE name REGEXP '^John'MySQL 8.1SELECT * FROM Users WHERE name ~ '^John'Dieser Ausdruck sucht Strings, die mit „John“ beginnen. Das Zeichen ^ markiert den Anfang des Strings.
-
Gib alle Schulfächer aus, deren Name auf „e“ oder „y“ endet:
MySQL 8.1SELECT * FROM Subject WHERE name REGEXP '[ey]$'MySQL 8.1SELECT * FROM Subject WHERE name ~ '[ey]$'In diesem Beispiel legt [ey] die möglichen Werte für das Muster fest, und $ gibt an, womit der String enden muss.
-
Finde alle Nutzer, deren E-Mail-Adresse auf „@outlook.com“ oder „@icloud.com“ endet:
MySQL 8.1SELECT * FROM Users WHERE email REGEXP '@(outlook\\.com|icloud\\.com)$'MySQL 8.1SELECT * FROM Users WHERE email ~ '@(outlook\.com|icloud\.com)$'Auch hier markiert $ das Ende des Strings, und | erlaubt mehrere Alternativen.
-
Finde alle Nutzer, deren Telefonnummer keine Ziffern „2“ und „8“ enthält:
MySQL 8.1SELECT * FROM Users WHERE phone_number REGEXP '^[^28]*$'MySQL 8.1SELECT * FROM Users WHERE phone_number ~ '^[^28]*$'In diesem Beispiel steht [^28] für jedes Zeichen außer „2“ und „8“, und * erlaubt eine beliebige Anzahl solcher Zeichen. Die Zeichen ^ und $ markieren Anfang und Ende des Strings und sorgen dafür, dass der gesamte String dem Muster entspricht.
-
Finde alle Nutzer, deren Telefonnummer mit „+7“ beginnt
MySQL 8.1SELECT name, phone_number FROM Users WHERE phone_number REGEXP '^\\+7'MySQL 8.1SELECT name, phone_number FROM Users WHERE phone_number ~ '^\+7'In diesem Beispiel markiert ^ den Anfang des Strings. Wir suchen also Strings, die mit einem bestimmten Muster beginnen.
Da + in regulären Ausdrücken ein Sonderzeichen ist, muss es mit einem doppelten Backslash (\\) escaped werden, damit es als gewöhnliches + interpretiert wird. So entspricht \\+ dem Zeichen + im String.
Da + in regulären Ausdrücken ein Sonderzeichen ist, muss es mit einem einfachen Backslash (\) escaped werden, damit es als gewöhnliches + interpretiert wird. So entspricht \+ dem Zeichen + im String.