MySQL REGEXP erklärt: Vollständiger Leitfaden mit Beispielen (MySQL‑8.0‑Funktionen enthalten)

目次

1. Einführung

Was ist MySQL Regular Expression (REGEXP)?

MySQL‑reguläre Ausdrücke sind leistungsstarke Werkzeuge, um flexibel nach Zeichenketten zu suchen und diese innerhalb einer Datenbank zu manipulieren. Sie ermöglichen fortgeschrittene Mustererkennungen, die mit herkömmlichen String‑Suchen nur schwer zu realisieren sind, und erlauben das Extrahieren von Daten, die einem bestimmten Format oder einer Bedingung entsprechen.

Zum Beispiel können Sie leicht Daten wie „Namen, die mit einem bestimmten Zeichen beginnen“ oder „Codes, die ausschließlich numerische Werte enthalten“ extrahieren. Diese Funktionalität ist besonders nützlich für Datenbereinigung und das Handling komplexer Suchbedingungen.

Vorteile der Verwendung regulärer Ausdrücke in MySQL

  1. Unterstützung für komplexe Suchbedingungen
  • Sie können komplexe Zeichenketten‑Muster angeben, die vom Standard‑LIKE‑Operator nicht verarbeitet werden können.
  1. Batch‑Extraktion und -Ersetzung von Daten
  • Zum Beispiel können Sie nur Daten extrahieren, die einem bestimmten Format entsprechen, oder einen Teil einer Zeichenkette ersetzen.
  1. Erweiterte Funktionen in MySQL 8.0 und höher
  • Neue Funktionen wie REGEXP_LIKE und REGEXP_SUBSTR wurden hinzugefügt, wodurch flexiblere Operationen möglich werden.

Zweck dieses Artikels

Dieser Artikel erklärt alles von der grundlegenden Verwendung von MySQL‑regulären Ausdrücken (REGEXP) bis hin zu fortgeschrittenen Beispielen und wichtigen Überlegungen. Egal, ob Sie Anfänger oder halb‑professionell sind, Sie finden praxisnahe Einblicke, die für reale Anwendungen nützlich sind.

Im nächsten Abschnitt erläutern wir die Grundlagen regulärer Ausdrücke in MySQL.

2. Grundlagen regulärer Ausdrücke in MySQL

Was ist der REGEXP‑Operator?

In MySQL wird der REGEXP‑Operator verwendet, um mit regulären Ausdrücken zu arbeiten. Dieser Operator bestimmt, ob ein Wert einem angegebenen Muster entspricht. Zusätzlich fungiert RLIKE als Alias für REGEXP.

Das folgende Beispiel prüft, ob ein String dem Muster „abc“ entspricht.

SELECT * FROM users WHERE name REGEXP 'abc';

Grundsyntax des REGEXP‑Operators

Die Grundsyntax für die Suche mit regulären Ausdrücken lautet wie folgt:

SELECT * FROM table_name WHERE column_name REGEXP 'pattern';

Liste gängiger REGEXP‑Muster

SymbolDescriptionExample
^Matches the beginning of a line^abc → Strings that start with „abc“
$Matches the end of a lineabc$ → Strings that end with „abc“
.Matches any single charactera.c → Matches „abc“, „adc“, etc.
|OR (matches either pattern)abc|xyz → Matches „abc“ or „xyz“
[]Matches any one of the specified characters[abc] → Matches „a“, „b“, or „c“
*Matches zero or more repetitionsab*c → Matches „ac“, „abc“, „abbc“, etc.

Unterschied zwischen REGEXP und LIKE

FeatureLIKEREGEXP
FlexibilitySupports only wildcards (% and _)Supports advanced pattern matching
PerformanceFastMay be slightly slower for complex patterns

Praktische Beispiele: Suche mit REGEXP

Beispiel 1: Suche nach gültigem E‑Mail‑Format

SELECT * FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

Beispiel 2: Suche nach Feldern, die nur Zahlen enthalten

SELECT * FROM orders WHERE order_id REGEXP '^[0-9]+$';

Zusammenfassung

In diesem Abschnitt haben wir die grundlegende Verwendung und die Muster des REGEXP‑Operators in MySQL behandelt. Damit lassen sich sowohl einfache Suchen als auch komplexe Mustererkennungen für flexible Datenoperationen durchführen.

3. Reguläre Ausdrucksfunktionen, die in MySQL 8.0 hinzugefügt wurden

REGEXP_LIKE() – Übereinstimmungsprüfung mit einem regulären Ausdruck

REGEXP_LIKE(string, pattern [, flags])

Beispiel:

SELECT REGEXP_LIKE('abcdef', 'abc');

Ergebnis: 1 (passt)

REGEXP_INSTR() – Position des Treffers finden

REGEXP_INSTR(string, pattern [, start_position, occurrence, flags, return_type])

Beispiel:

SELECT REGEXP_INSTR('abcdef', 'cd');

Ergebnis: 3

REGEXP_SUBSTR() – das passende Teilzeichenkette extrahieren

REGEXP_SUBSTR(string, pattern [, start_position, occurrence, flags])

Beispiel:

SELECT REGEXP_SUBSTR('abc123def', '[0-9]+');

Ergebnis: 123

REGEXP_REPLACE() – Ersetzen mit einem regulären Ausdruck

REGEXP_REPLACE(string, pattern, replacement [, start_position, occurrence, flags])

Beispiel:

SELECT REGEXP_REPLACE('Item123Price456', '[0-9]', '#');

Ergebnis: Item###Price###

Zusammenfassung

Die in MySQL 8.0 eingeführten regulären Ausdrucksfunktionen ermöglichen detaillierte und flexible Zeichenkettenoperationen. Durch ihren effektiven Einsatz können Sie Daten effizienter extrahieren und transformieren.

4. Praktische Anwendungsfälle für reguläre Ausdrücke

Suche nach Daten, die bestimmten Mustern entsprechen

Beispiel 1: Erkennung des E‑Mail‑Adressformats

SELECT * FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

Beispiel 2: Erkennung des Telefonnummernformats

SELECT * FROM contacts WHERE phone REGEXP '^[0-9]{3}-[0-9]{4}-[0-9]{4}$';

Teilstrings extrahieren

Beispiel 1: Extrahiere den numerischen Teil

SELECT REGEXP_SUBSTR('abc123def456', '[0-9]+');

Ergebnis: 123

Daten ersetzen

Beispiel 1: Zahlen durch “#” ersetzen

SELECT REGEXP_REPLACE('Item123Price456', '[0-9]', '#');

Ergebnis: Item###Price###

Datenvalidierung und -bereinigung

Beispiel 1: Ungültige E‑Mail‑Adressen erkennen

SELECT * FROM users WHERE email NOT REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

Zusammenfassung

Mit diesen Beispielen können Sie Aufgaben wie Suchen, Extrahieren, Ersetzen und Validieren von Daten effizient erledigen.

5. Wichtige Überlegungen und bewährte Verfahren

Umgang mit Multibyte‑Zeichen (Vollbreite Zeichen)

Da MySQL‑Reguläre‑Ausdrücke standardmäßig byteweise ausgewertet werden, ist beim Umgang mit Multibyte‑Zeichen wie japanischen Zeichen besondere Vorsicht geboten.

Lösung:

ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Auswirkungen auf die Leistung

Problem: Da reguläre Ausdrücke komplexe Verarbeitung erfordern, kann die Leistung bei der Suche in großen Datensätzen nachlassen.
Lösung:

SELECT * FROM users WHERE email LIKE '%@example.com' AND email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

Schutz vor ReDoS (Regular Expression Denial of Service)

Problem: Bösartige Muster können zu einer übermäßigen Systembelastung führen.
Lösung:

  1. Verwenden Sie nach Möglichkeit einfache Muster.
  2. Verstärken Sie die Eingabevalidierung.
  3. Überwachen Sie die Ausführungszeit von Abfragen.

Versionskompatibilität prüfen

Die neueren Funktionen für reguläre Ausdrücke sind in MySQL‑Versionen vor 8.0 nicht verfügbar. Überprüfen Sie stets die Version Ihrer Umgebung, bevor Sie sie implementieren.

Testen in einer Staging‑Umgebung

Testen Sie das Verhalten und die Leistung von Abfragen im Voraus, einschließlich der Handhabung von Randfällen und ungültigen Werten.

Zusammenfassung

Behalten Sie diese bewährten Verfahren im Hinterkopf, um reguläre Ausdrücke sicher und effizient zu nutzen, wobei sowohl Leistung als auch Sicherheit berücksichtigt werden.

6. Fazit

Wichtige Erkenntnisse

  1. Durch das Erlernen grundlegender Operationen und regulärer Ausdrucksmuster können Sie alles von einfachen Suchen bis hin zu komplexen Datenextraktionen bewältigen.
  2. Die in MySQL 8.0 eingeführten Funktionen für reguläre Ausdrücke ermöglichen noch flexiblere Operationen.
  3. Praktische Beispiele erhöhen die Effizienz bei der Datenmanipulation in realen Szenarien.
  4. Die Anwendung bewährter Verfahren sorgt für sichere und leistungsstarke Abfragen.

Vorteile der Verwendung von MySQL‑Regulären‑Ausdrücken

  • Erweiterte Suchfunktionen: Bedingungen lassen sich leicht definieren, die mit einfachen Zeichenkettensuchen schwer umzusetzen sind.
  • Verbesserte Effizienz der Datenverarbeitung: Extraktion, Ersetzung und Validierung können direkt in SQL durchgeführt werden.
  • Breites Anwendungsspektrum: Nützlich für alles von Datenbereinigung bis zur Protokollanalyse.

Wie Sie weiter lernen und anwenden können

  1. Üben Sie Abfragen mit realen Datensätzen, um Ihr Verständnis zu vertiefen.
  2. Nutzen Sie aktiv die neuesten Versions‑Features, um die Leistung zu optimieren.
  3. Überprüfen Sie regelmäßig Ihre Abfragen, um Sicherheit und Geschwindigkeit zu gewährleisten.

Abschließende Gedanken

Durch das Beherrschen von MySQL‑Regulären‑Ausdrücken können Sie die operative Effizienz steigern und Ihre Fähigkeiten zur Datenanalyse verbessern.

7. Häufig gestellte Fragen (FAQ)

F1. Was ist der Unterschied zwischen REGEXP und LIKE in MySQL?

A. REGEXP unterstützt erweiterte Mustererkennung, während LIKE hauptsächlich für Teilzeichenketten‑Abgleiche verwendet wird.

SELECT * FROM users WHERE email LIKE '%example.com';
SELECT * FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

Q2. Wie kann ich die Leistung verbessern?

A.

  1. Filterbedingungen im Voraus anwenden.
  2. Indizes effektiv nutzen.
  3. Abfragen einfach und optimiert halten.

Q3. Wie gehe ich mit mehrbyteigen Zeichen um?

A. UTF-8‑Unterstützung konfigurieren.

ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Q4. Können Sie ein Beispiel für Ersetzungen mit regulären Ausdrücken zeigen?

A. Ersetze Zahlen durch “#”.

SELECT REGEXP_REPLACE('Item123Price456', '[0-9]', '#');

Q5. Wie lautet eine Abfrage, um ein Datumsformat zu konvertieren?

A. Ändere “YYYY/MM/DD” zu “YYYY-MM-DD”.

SELECT REGEXP_REPLACE('2023/12/20', '/', '-');

Q6. Wie kann ich mehrere Bedingungen mit REGEXP angeben?

A. Verwende das Pipe‑Symbol (|).

SELECT * FROM products WHERE name REGEXP 'phone|tablet';

Zusammenfassung

Der FAQ‑Abschnitt behandelte häufige Fragen und lieferte praktische Abfragebeispiele.