Postgres Regex Beispiele

PostgreSQL ist eine beliebte Open-Source-relationale Datenbank mit einem soliden Ruf für die Zuverlässigkeit, Flexibilität und Unterstützung für offene technische Standards. Es unterstützt sowohl relationale als auch nicht-relationale Datentypen und macht es zu einer der konform, stabilsten und reifen relationalen Datenbanken.

In diesem Leitfaden werden wir tief in die Verwendung von Regex mit PostgreSQL eintauchen.

Voraussetzungen:

Um die nachgewiesenen Schritte in diesem Handbuch auszuführen, benötigen Sie die folgenden Komponenten:

  • Ein richtig konfiguriertes Linux-System. Erfahren Sie mehr über das Erstellen einer Ubuntu -virtuellen Maschine auf VirtualBox.
  • Eine ordnungsgemäße PostgreSQL -Installation. Erfahren Sie mehr über die Installation und Einrichtung von PostgreSQL auf Ubuntu.
  • Zugang zu einem Nicht-Wurzel Benutzer mit sudo Erfahren Sie mehr über das Management von Sudo -Privilegien mit Sudoers.

Regex und postgresql

Eine kurzfristige für regulären Ausdruck, Regex ist eine Textfolge, die ein Muster beschreibt, das den Text übereinstimmt, lokalisiert und verwaltet. Es ist ein vielseitiges Tool, das von vielen Programmiersprachen unterstützt wird (Perl, Python, Java, Kotlin, Scala, Go, C ++ usw.) und Werkzeuge (awk, sed, nginx, grep/eGrep und mehr).

PostgreSQL verwendet die regulären Ausdrücke von POSIX, die besser funktionieren können als Abfragen wie WIE Und ÄHNLICH ZU Betreiber.

Demo -Datenbank

Für Demonstrationszwecke arbeiten wir mit einer Dummy -Datenbank, die mit Dummy -Einträgen besiedelt ist.

Stellen Sie eine Verbindung zum lokalen PostgreSQL -Server her Postgres:

$ sudo -i -u postgres psql

Erstellen Sie aus der Postgresql -Shell eine Dummy -Datenbank mit dem Namen Demo_DB:

$ Create Database Demo_DB;

Wechseln Sie zur neuen Datenbank:

$ \ c Demo_DB

Erstellen Sie eine neue Tabelle:

Tabellenbenutzer erstellen (Benutzer
Id serielle Primärschlüssel,
Nennen Sie Text nicht null,
E -Mail -Text);

Als nächstes bevölkern Sie die Tabelle mit einigen Werten:

Einfügen in Benutzer (Name, E -Mail) Werte
('James', '[email protected] '),
('Mary', '[email protected] ')),
('Robert', '[email protected] '),
('Patricia', [email protected] ')),
('Michael', '[email protected] '),
('David', '[email protected] ')),
('Richard', '[email protected] '),
('Elizabeth', [email protected] '),
('Lisa', '[email protected] ')),
('Charles', '[email protected] '))
;

Überprüfen Sie den Inhalt der aktualisierten Tabelle:

$ Select * von Benutzern;

PostgreSQL Match -Operatoren

Hier finden Sie eine kurze Liste verschiedener Postgresql Regex -Operatoren für Musteranpassungen:

  • ~: Ein gewöhnlicher Operator, der einem regulären Ausdruck entspricht (Fallempfindlichkeit)
  • ~*: Entspricht dem gegebenen regulären Ausdruck (Fall unempfindlich)
  • !~: Filtert die unerreichten Vorkommen (Fallempfindlichkeit)
  • !~*: Filtert die unerreichten Vorkommen (Fall unempfindlich)

Beispiel 1: Eine Einführung

Beginnen wir unsere Reise mit dem regulären Ausdruck nach Postgresql mit dem folgenden Beispiel:

$ SELECT * von Benutzern, wobei E -Mail ~ '^.*$ ';

Hier:

  • Der reguläre Ausdruck beginnt mit dem Tilde (~) -Operator, gefolgt von einer Wildcard (*). Es wählt alle Datensätze aus der Benutzertabelle aus.
  • Der „^“ -Preiber bezeichnet den Beginn einer Zeichenfolge.
  • Der ".Operator ist ein Wildcard -Operator für einen einzelnen Charakter.
  • Der „$“ -Operator bezeichnet das Ende einer Zeichenfolge.

Alle diese Operatoren zusammen: „^.*$ ”, Bezeichnen eine Zeichenfolge, die mit beginnt Jeder Charakter und endet mit Jede Zeichenfolge.

Beispiel 2: Fallempfindlichkeit

Standardmäßig ist der Tilde (~) Operator Fall sensibel. Wir können diese Eigenschaft mit den folgenden Fragen demonstrieren:

$ SELECT * von Benutzern, wobei E -Mail ~ 'Beispiel';
$ SELECT * von Benutzern, wobei E -Mail ~ 'Beispiel';

Beispiel 3: Fall unempfindlich

Wenn wir die von Fall unempfindlichen Operationen ausführen möchten, müssen wir den Sternchen (*) Operator zusammen mit dem Tilde (~) Operator (~) einbeziehen.

$ SELECT * von Benutzern, wobei E -Mail ~ * 'Beispiel';
$ SELECT * von Benutzern, wobei E -Mail ~ * 'Beispiel';

Da wir die von der Fall unempfindliche Interpretation des regulären Ausdrucks angegeben haben, geben beide Abfragen dieselbe Ausgabe zurück.

Beispiel 4: Invert -Match

Standardmäßig stimmen reguläre Ausdrücke dem angegebenen Muster überein.

Schauen Sie sich die folgende Anfrage an:

$ Ausgewählt * von Benutzern, wobei E -Mails !~ 'Beispiel';
$ Ausgewählt * von Benutzern, wobei E -Mails !~ 'Beispiel';

Hier:

  • Das Standardverhalten des „~“ -Preibers besteht darin, dem von Regex angegebenen Muster übereinzustimmen.
  • Verwendung der "!~ ”Operator, wir ignorieren die Fälle, in denen das Muster übereinstimmt.

Verwenden Sie die „Fall-unempfindliche Invert-Übereinstimmung durch, um die von Fall zu tun, um die“ zu verwenden!~*”Operator stattdessen:

$ Ausgewählt * von Benutzern, wobei E -Mails !~* 'Beispiel';
$ Ausgewählt * von Benutzern, wobei E -Mails !~* 'Beispiel';

Beispiel 5: Filtern Sie die Daten bis zum Ende der Zeichenfolge

Führen Sie die folgende Anfrage aus:

$ Select * von Benutzern, wobei E -Mail ~ * 'com $';

Hier:

  • Wir filtern die Saiten aus dem Email Spalte basierend auf dem Heck -Ende.
  • Der Operator „$“ zeigt das Ende der Zeichenfolge an.
  • Der Regex „Com $“ beschreibt, dass es für Strings übereinstimmt, die am Ende „com“ haben.

Beispiel 6: Filtern Sie die Daten bis zum Beginn der Zeichenfolge

Schauen Sie sich die folgende Anfrage an:

$ SELECT * von Benutzern, wobei E -Mail ~ * '^M';

Hier:

  • Wir filtern die Zeichenfolgen aus der E -Mail -Spalte basierend auf ihren Initialen.
  • Der "^" -Preiber zeigt den Beginn einer Zeichenfolge an.
  • Der Regex "^m" beschreibt, dass es zu Strings übereinstimmt, die zu Beginn „M“ haben.

Beispiel 7: Daten vom Typ Zifferblatt

Wir können auch den regulären Ausdruck verwenden, um die Befundeinträge anzugeben, die Ziffern enthalten. Die folgende Abfrage zeigt es perfekt:

$ SELECT * von Benutzern, wobei E-Mail ~ '[0-9]';

In dieser Abfrage verwenden wir die Charakterklassenfunktion des regulären Ausdrucks. Grundsätzlich ist es eine Abkürzung, bestimmte Charakterklassen darzustellen. Zum Beispiel ist [0-9] eine Darstellung der Zifferncharakterklasse.

Als Referenz finden Sie hier eine kurze Liste verschiedener regulärer Ausdruckscharakterklassen:

  • Großbuchstabe: [[:Oberer, höher:]] oder [A-Z]
  • Kleinbuchstabe: [[:untere:]] oder [A-Z]
  • Alphabet: [[:Alpha:]] oder [A-Za-Z]
  • Alphanumerisch: [[: Alnum:]] oder [A-Za-Z0-9]
  • Hexadezimal: [[: xDigit:]] oder [0-9a-fa-f]
  • ASCII: [[:ASCII:]]

PostgreSQL Regex -Funktionen

Neben dem regulären Ausdruck von POSIX verfügt PostgreSQL auch mit verschiedenen regexspezifischen Funktionen. Dieser Abschnitt zeigt diese Funktionen mit Beispielen.

Regexp_replace ()

Die Syntax der Regexp_replace () Funktion ist wie folgt:

$ Regexp_replace (, , ,)

Hier:

  • Quelle: Eine Zeichenfolge, in der der Ersatz stattfindet.
  • Muster: Ein regelmäßiger Ausdruck von POSIX, der den Unterstrichen entspricht, die ersetzt werden sollten.
  • Ersatz_String: Eine Zeichenfolge, die das Regex -Muster ersetzt.
  • Flaggen: Es ist eine optionale Komponente. Es kann ein oder mehrere Charaktere sein, der das Verhalten der Funktion beeinflusst.

Setzen wir die Funktion in Aktion ein:

$ Select regexp_replace ('abc123xyz', '[a-za-z]', ',' g ');

Wir können auch die bereitstellen Regexp_replace () Um an Strings aus Datenbankeinträgen zu arbeiten:

$ Wählen Sie regexp_replace (E-Mail, '[0-9]', '*', 'G') von Benutzern;

Wie angewiesen, ersetzt die Funktion alle Ziffern aller Einträge unter der E -Mail -Spalte durch ein Sternchen (*).

Regexp_matches ()

Wie der Name der Funktion vorschlägt, Regexp_matches () wird verwendet, um alle Instanzen des Musters in einer bestimmten Zeichenfolge zu finden. Die Funktionssyntax ist wie folgt:

$ Regexp_matches (, , );

Hier:

  • Quelle: Eine Zeichenfolge, in der die Funktion nach dem angegebenen Muster sucht.
  • Muster: Ein Muster, das in POSIX -regulären Ausdruck beschrieben wird.
  • Flaggen: Es kann ein oder mehrere Zeichen sein, die das Verhalten der Funktion beeinflussen.

Schauen Sie sich das folgende Beispiel an:

$ Select regexp_matches ('The Quick Brown Fox', 'The', 'G');

Beachten Sie, dass Regexp_matches () druckt die Ausgabe als Set.

Als nächstes filtern wir die Daten aus unserer Datenbank:

$ Wählen Sie regexp_matches (E -Mail, '.+@(.*) $ ') Von Benutzern;

Die Ausgabe ist ein Satz aller eindeutigen Domänen der E -Mail -Adressen.

Substring ()

Der Substring () Funktion gibt einen Teil einer bestimmten Zeichenfolge zurück. Das Substring wird basierend auf den angegebenen Parametern erzeugt.

Die Syntax der Substring () Funktion ist wie folgt:

$ Substring (, , )

Hier:

  • Saite: Die Zeichenfolge, aus der die Funktion ein Substring erzeugt.
  • Startposition: Ein positiver Ganzzahlwert, der die Position zum Extrahieren des Substrings angibt. Wenn der Wert 0 ist, beginnt die Substring -Extraktion am ersten Zeichen der Zeichenfolge.
  • Länge: Ein positiver Ganzzahlwert, der die Anzahl der Zeichen angibt, die aus der Start_position extrahiert werden sollen. Wenn nicht angegeben, wirkt die Funktion so, als wäre der Wert die maximale Länge der angegebenen Zeichenfolge.

Die folgenden Beispiele zeigen das Verhalten der Substring () perfekt funktionieren:

$ SELECT Substring ('The Quick Brown Fox', 6, 9);
$ SELECT Substring ('The Quick Brown Fox', 6);

Wir können diese Funktion auch nutzen, um die Daten aus der Datenbank zu manipulieren:

$ Wählen Sie eindeutiges Substring (E -Mail von '.+@(.*) $ ') Von Benutzern;

Die Ausgabe druckt alle eindeutigen Domänen der E -Mail -Adressen als eine Liste von Substrings aus.

Split_part ()

Der Split_part () Funktion nimmt eine Zeichenfolge und spaltet sie in verschiedene Teile auf. Die Syntax der Funktion lautet wie folgt:

$ Split_part (, , );

Hier:

  • Saite: Die Zeichenfolge, die in mehrere Substrings aufgeteilt ist.
  • Abgrenzer: Eine Zeichenfolge, die als Trennzeichen für die Spaltung verwendet wird.
  • Position: Die Position des Teils zurückkehren. Der Wert beginnt von 1.

Besuche die Split_part () Funktion in Aktion:

$ Select split_part ('a, b, c, d, e', ',', 4);
$ Select split_part ('a, b, c, d, e', ',', 2);

Im folgenden Beispiel verwenden wir die Split_part () So teilen Sie die E -Mail -Adressen und schnappen Sie sich die Domain:

$ Wählen Sie split_part (E -Mail, '@', 2) von Benutzern;

Abschluss

In diesem Leitfaden haben wir ein detailliertes Tutorial über die Verwendung des regulären Ausdrucks zur Erstellung der SQL. Die Verwendung eines regulären Ausdrucks ermöglicht weitaus mehr Flexibilität als die anderen etablierten Methoden. Zum Beispiel die Verwendung der WIE Operator.

Neben der grundlegenden Implementierung haben wir auch die Verwendung von Regex in verschiedenen anderen PostgreSQL -Funktionen gezeigt, um ihre Funktionalität erheblich zu verbessern. Tatsächlich können Sie auch den regulären Ausdruck auf benutzerdefinierten Funktionen implementieren.

Interessiert, mehr zu lernen? Die PostgreSQL-Unterkategorie enthält Hunderte von Leitfäden und Tutorials zu den verschiedenen Merkmalen von PostgreSQL.