PostgreSQL REGEXP_MATCHES
Die Funktion REGEXP_MATCHES in PostgreSQL wird verwendet, um mit regulären Ausdrücken nach einem Muster innerhalb einer Zeichenkette zu suchen und alle Vorkommen von Übereinstimmungen zurückzugeben. Sie ist besonders nützlich, um Teilzeichenfolgen zu extrahieren, die einem bestimmten Muster entsprechen.
Verwendung
Die Funktion REGEXP_MATCHES wird verwendet, wenn du aus einer Zeichenkette Teilzeichenfolgen finden und extrahieren musst, die mit einem bestimmten Muster eines regulären Ausdrucks übereinstimmen. Sie gibt eine Reihe von Text-Arrays zurück, wobei jedes Array die Teilzeichenketten enthält, die den Gruppen im Muster entsprechen. Wenn das Muster übereinstimmt, aber keine Erfassungsgruppen enthält, wird ein leeres Array zurückgegeben.
SELECT REGEXP_MATCHES(source_string, pattern [, flags]);
source_string: Die zu suchende Zeichenfolge.pattern: Der reguläre Ausdruck, der mit der Quellzeichenkette verglichen werden soll.flags: Optional. Modifikatoren wie "i" für Groß- und Kleinschreibung. Ohne diese Angabe wird standardmäßig die Groß- und Kleinschreibung beachtet.
Beispiele
1. Basic Pattern Match
SELECT REGEXP_MATCHES('abc123', '\d+');
Diese Abfrage sucht nach einer oder mehreren Ziffern in der Zeichenfolge 'abc123' und gibt {"123"} als Treffer zurück.
2. Groß- und Kleinschreibung beachten
SELECT REGEXP_MATCHES('PostgreSQL', 'postgresql', 'i');
Hier wird das Muster 'postgresql' mit der Zeichenkette 'PostgreSQL' abgeglichen und {"PostgreSQL"} zurückgegeben.
3. Mehrere Gruppen extrahieren
SELECT REGEXP_MATCHES('User: John, Age: 30', 'User: (\w+), Age: (\d+)');
In diesem Beispiel extrahiert die Funktion den Benutzernamen und das Alter aus dem String und gibt {"John", "30"} als übereinstimmende Gruppen zurück.
4. Verwendung mit LATERAL in einer komplexen Abfrage
SELECT user_data.username, match
FROM users as user_data,
LATERAL REGEXP_MATCHES(user_data.details, 'User: (\w+), Age: (\d+)') AS match;
Dieses Beispiel demonstriert die Verwendung von REGEXP_MATCHES in einer FROM Klausel mit LATERAL, um Benutzerdetails aus einer Tabelle zu extrahieren und anzuzeigen.
Tipps und bewährte Praktiken
- Verstehe die Grenzen der Flagge. Beachte, dass das 'g'-Flag für den globalen Abgleich nicht von
REGEXP_MATCHESunterstützt wird. - Erfasse bestimmte Teile. Verwende Klammern in Mustern, um bestimmte Teile der übereinstimmenden Zeichenfolge für detaillierte Ergebnisse zu erfassen.
- Überlegungen zum Rückgabetyp.
REGEXP_MATCHESgibt eine Reihe von Text-Arrays zurück, die in deiner Abfragelogik möglicherweise zusätzlich behandelt werden müssen. - Funktionsauswahl. Vergleiche mit ähnlichen Funktionen wie
REGEXP_REPLACE,REGEXP_SPLIT_TO_TABLEundREGEXP_SPLIT_TO_ARRAY, um die passende für deine Bedürfnisse zu finden.