Reguläre Ausdrücke

Gilt für:mit Häkchen markiert: Ja Databricks SQL mit Häkchen markiert: Ja Databricks Runtime

Ein regulärer Ausdruck (regex) ist ein Muster, das eine Reihe von Zeichenfolgen beschreibt. Mehrere Azure Databricks SQL-Funktionen und -Operatoren verwenden einen regulären Ausdruck, um Text abzugleichen, zu suchen, zu zählen, zu extrahieren, zu ersetzen oder aufzuteilen:

  • Operator "rlike " und "regexp ": Testen Sie, ob eine Zeichenfolge mit einem Muster übereinstimmt.
  • regexp_like-Funktion : Testen, ob eine Zeichenfolge mit einem Muster übereinstimmt.
  • regexp_count Funktion: Zählen, wie oft ein Muster übereinstimmt.
  • regexp_instr Funktion: Gibt die Position der ersten Übereinstimmung zurück.
  • regexp_substr Funktion: Gibt die erste übereinstimmende Teilzeichenfolge zurück.
  • regexp_extract - und regexp_extract_all funktionen: Zurückgeben einer Erfassungsgruppe aus der ersten Übereinstimmung oder aus allen Übereinstimmungen.
  • regexp_replace Funktion: Ersetzen Sie Übereinstimmungen durch eine Ersetzungszeichenfolge.
  • split function: Split a string around matches of a pattern.

Die Operatoren "Gefällt mir" und "Gefällt mir" verwenden keine regulären Ausdrücke. Sie verwenden eine einfachere Mustersprache basierend auf _ und %.

Regex-Modul

Azure Databricks wertet reguläre Ausdrücke mithilfe des Java java.util.regex Moduls aus. Muster müssen Java Syntax regulärer Ausdrücke befolgen, die weitgehend mit regulären Ausdrücken im Perl-Stil kompatibel sind, jedoch in einigen Details unterschiedlich sind. Die vollständige und autoritative Referenz finden Sie in der Java Pattern Klassendokumentation.

In den folgenden Abschnitten werden die am häufigsten verwendeten Konstrukte beschrieben.

Zeichenklassen

Bauen Treffer
. Ein einzelnes Zeichen mit Ausnahme eines Zeilenabschlusszeichens (es sei denn, die s Kennzeichnung ist festgelegt).
[abc] Eines der aufgeführten Zeichen: a, , b, oder c.
[^abc] Jedes einzelne Zeichen, das nichta, boder c.
[a-z] Ein beliebiges Zeichen im Bereich a durch z.
\d, \D Eine Ziffer ([0-9]); \D entspricht keiner Ziffer.
\w, \W Ein Wortzeichen ([a-zA-Z_0-9]); \W entspricht einem beliebigen Nicht-Wort-Zeichen.
\s, \S Leerzeichen; \S entspricht jedem Nicht-Leerzeichen.

Verankerungen und Grenzen

Bauen Treffer
^ Der Anfang der Eingabe (oder einer Zeile mit der m Kennzeichnung).
$ Das Ende der Eingabe (oder einer Zeile mit der m Kennzeichnung).
\b, \B Eine Wortgrenze; \B entspricht einer Nicht-Wort-Grenze.

Quantifizierer

Quantifizierer geben an, wie oft das vorherige Element übereinstimmen muss. Standardmäßig sind Quantifizierer gierig und stimmen so weit wie möglich überein. Fügen Sie ? an, um einen Quantifizierer widerwillig zu machen (so wenig wie möglich abzugleichen), z. B .*?. .

Bauen Entspricht dem vorherigen Element...
* Null oder mehrere Male.
+ Ein- oder mehrmals.
? Null oder ein Mal.
{n} Genau n mal.
{n,} Mindestens n mal.
{n,m} Zwischen n und m Uhrzeit.

Gruppen und Änderung

Bauen Description
(...) Eine Aufnahmegruppe. Verwenden Sie den Gruppenindex mit regexp_extract.
(?:...) Eine nicht erfassende Gruppe. Gruppen ohne Erfassen der Übereinstimmung.
a\|b Änderung. Gleicht entweder a oder b.

Inlinekennzeichnungen

Platzieren Sie eine Kennzeichnung am Anfang des Musters, um die Übereinstimmung des gesamten Musters zu ändern.

Flag Effect
(?i) Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung.
(?s) Dotall-Modus. . entspricht Linienterminatoren.
(?m) Mehrzeilenmodus. ^ und $ an Zeilenumbrüchen übereinstimmen.
(?x) Kommentarmodus. Ignoriert nicht gescapete Leerzeichen im Muster.

Beispiel: (?i)ste(v\|ph)en Übereinstimmungen Steven, , stevenund STEPHEN unabhängig vom Fall.

Escapen und Zeichenfolgenliterale

Zum Abgleichen eines Zeichens, das auch ein regex-Metacharacter ist (z .. B. , *, , (, [oder \), stellen Sie ihm einen umgekehrten Schrägstrich voran. Entspricht z \. . B. einer Literalperiode und \\ einem literalen umgekehrten Schrägstrich.

Da ein umgekehrter Schrägstrich auch das Escapezeichen in normalen SQL-Zeichenfolgenliteralen ist, müssen Sie jeden umgekehrten Schrägstrich verdoppeln, den Sie an das Regex-Modul übergeben möchten. Wenn Sie z. B. das Muster \d+ an eine Funktion übergeben möchten, schreiben Sie es wie '\\d+' in einem regulären Zeichenfolgenliteral.

Verwenden Sie ein raw-literal Präfix(r Präfix), das die Vorverarbeitung von Escapezeichen deaktiviert, um dies zu vermeiden. Schreiben Sie in einem unformatierten Literal das Muster genau so, wie das Regex-Modul es erwartet:

-- Regular string literal: backslashes must be doubled.
> SELECT regexp_substr('item 42 in stock', '\\d+');
 42

-- Raw literal: write the pattern as-is.
> SELECT regexp_substr('item 42 in stock', r'\d+');
 42

Allgemeine Muster

Die folgenden Muster decken häufige Aufgaben ab. Sie werden als unformatierte Literale geschrieben, sodass umgekehrte Schrägstriche unverändert an das Regex-Modul übergeben werden. Die E-Mail-, URL- und IP-Muster sind absichtlich einfache Illustrationen, keine strengen Validatoren.

Zielsetzung Pattern
Ganze Zahl, optional signiert r'-?\d+'
Dezimalzahl r'-?\d+(\.\d+)?'
Ein Wort r'\w+'
Nur das ganze Wort cat r'\bcat\b'
E-Mail-Adresse (einfach) r'[\w.%+-]+@[\w.-]+\.\w{2,}'
Hosten in einer URL r'https?://([^/]+)'
IPv4-Adresse (überprüft nicht 0 bis 255) r'\d{1,3}(\.\d{1,3}){3}'
ISO-Datum (YYYY-MM-DD) r'\d{4}-\d{2}-\d{2}'
Führende oder nachfolgende Leerzeichen r'^\s+\|\s+$'
US-Telefonnummer (einfach) r'\d{3}-\d{3}-\d{4}'

Word Grenzen (\b) entsprechen einer ganzen word anstelle einer Teilzeichenfolge:

-- 'cat' as a standalone word
> SELECT 'the cat sat on the mat' rlike r'\bcat\b';
 true

-- 'cat' only as part of a larger word
> SELECT 'category' rlike r'\bcat\b';
 false

Kombinieren Sie ein Literalpräfix mit einem Quantifizierer, um ein strukturiertes Token zu extrahieren, z. B. eine Auftrags-ID:

> SELECT regexp_substr('Ref: ORD-12345 shipped on 2024-03-15', r'ORD-\d+');
 ORD-12345

Wählen Sie die richtige Funktion aus.

Verwenden Sie diese Tabelle, um die Funktion zu wählen, die Ihrem Ziel entspricht.

Sie möchten... Verwendung
Testen Sie, ob eine Zeichenfolge übereinstimmt. / Gefällt mirRegexp / regexp_like
Gibt die erste übereinstimmende Teilzeichenfolge zurück. regexp_substr
Zurückgeben einer Aufnahmegruppe. regexp_extract
Gibt alle Übereinstimmungen zurück. regexp_extract_all
Gibt die Position einer Übereinstimmung zurück. regexp_instr
Zählen Sie die Anzahl der Übereinstimmungen. regexp_count
Ersetzen Sie Übereinstimmungen durch anderen Text. regexp_replace
Teilen Sie eine Zeichenfolge um Übereinstimmungen. split
Passen Sie ein einfaches _ / % Muster an. mögen / Ilike