Reguliere expressies

Van toepassing op:gemarkeerd als ja Databricks SQL gemarkeerd als ja Databricks Runtime

Een reguliere expressie (regex) is een patroon dat een set tekenreeksen beschrijft. Verschillende Azure Databricks SQL-functies en -operators hebben een reguliere expressie die overeenkomt met tekst, zoeken, tellen, extraheren, vervangen of splitsen:

De operatoren like en ilike gebruiken geen reguliere expressies. Ze gebruiken een eenvoudigere patroontaal op _ basis van en %.

Regex-engine

Azure Databricks evalueert reguliere expressies met behulp van de Java-enginejava.util.regex. Patronen moeten Java syntaxis van reguliere expressies volgen, die breed compatibel is met reguliere expressies in Perl-stijl, maar in sommige details verschilt. Zie de Java Pattern klassedocumentatie voor de volledige en gezaghebbende verwijzing.

In de volgende secties worden de meest gebruikte constructies beschreven.

Tekenklassen

Bouwen Overeenkomsten
. Eén teken behalve een regeleindteken (tenzij de s vlag is ingesteld).
[abc] Een van de vermelde tekens: a, bof c.
[^abc] Een willekeurig teken dat nietab, of c.
[a-z] Elk teken in het bereik a door z.
\d, \D Een cijfer ([0-9]); \D komt overeen met een willekeurig niet-cijfer.
\w, \W Een woordteken ([a-zA-Z_0-9]); \W komt overeen met een niet-woordteken.
\s, \S Een witruimteteken; \S komt overeen met een niet-witruimteteken.

Ankers en grenzen

Bouwen Overeenkomsten
^ Het begin van de invoer (of van een regel met de m vlag).
$ Het einde van de invoer (of van een regel met de m vlag).
\b, \B Een woordgrens; \B komt overeen met een niet-woordgrens.

Kwantoren

Kwantificatoren geven aan hoe vaak het voorgaande element moet overeenkomen. Kwantificatoren zijn standaard hebzuchtig en komen zoveel mogelijk overeen. Voeg ? toe om een kwantificator onwillig te maken (bijvoorbeeld zo weinig mogelijk .*?overeen te komen).

Bouwen Komt overeen met het voorgaande element...
* Nul of meer keren.
+ Een of meer keren.
? Nul of één keer.
{n} Precies tijden n .
{n,} In ieder geval n .
{n,m} Tussen n en m tijden.

Groepen en alternatie

Bouwen Description
(...) Een vastleggende groep. Gebruik de groepsindex met regexp_extract.
(?:...) Een niet-vastleggende groep. Groepen zonder de overeenkomst vast te leggen.
a\|b Afwisseling. Komt overeen met of ab.

Inlinevlagmen

Plaats een vlag aan het begin van het patroon om te wijzigen hoe het hele patroon overeenkomt.

Flag Effect
(?i) Hoofdletterongevoelige overeenkomsten.
(?s) Dotall-modus. . komt overeen met regeleindtekens.
(?m) Modus met meerdere regels. ^ en $ overeenkomen bij regeleinden.
(?x) Opmerkingenmodus. Negeert niet-gescapede witruimte in het patroon.

Bijvoorbeeld (?i)ste(v\|ph)en overeenkomsten Steven, stevenen ongeacht hoofdletters en STEPHEN kleine letters.

Letterlijke tekens voor escapen en tekenreeksen

Als u een teken wilt vergelijken dat ook een regex-metacharacter (zoals ., (*, , [of \), voorafgaat aan een backslash. Komt bijvoorbeeld \. overeen met een letterlijke punt en \\ komt overeen met een letterlijke backslash.

Omdat een backslash ook het escape-teken is in gewone letterlijke SQL-tekenreeksen, moet u elke backslash verdubbelen die u wilt doorgeven aan de regex-engine. Als u bijvoorbeeld het patroon \d+ wilt doorgeven aan een functie, schrijft u het als '\\d+' in een gewone letterlijke tekenreeks.

Gebruik een raw-literal (r voorvoegsel) om dubbele escape-tekens te voorkomen, waarmee escape-tekenvoorverwerking wordt uitgeschakeld. Schrijf in een onbewerkte letterlijke notatie het patroon precies zoals de regex-engine verwacht:

-- 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

Algemene patronen

De volgende patronen hebben betrekking op frequente taken. Ze worden geschreven als onbewerkte letterlijke gegevens , zodat backslashes doorgaan naar de regex-engine ongewijzigd. De e-mail-, URL- en IP-patronen zijn opzettelijk eenvoudige illustraties, geen strikte validators.

Goal Pattern
Geheel getal, optioneel ondertekend r'-?\d+'
Decimaal getal r'-?\d+(\.\d+)?'
Een woord r'\w+'
Het hele woord cat alleen r'\bcat\b'
E-mailadres (eenvoudig) r'[\w.%+-]+@[\w.-]+\.\w{2,}'
Host in een URL r'https?://([^/]+)'
IPv4-adres (controleert niet 0-255) r'\d{1,3}(\.\d{1,3}){3}'
ISO-datum (YYYY-MM-DD) r'\d{4}-\d{2}-\d{2}'
Witruimte voorloop of volg witruimte r'^\s+\|\s+$'
Amerikaans telefoonnummer (eenvoudig) r'\d{3}-\d{3}-\d{4}'

Word grenzen (\b) komen overeen met een hele word in plaats van een subtekenreeks:

-- '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

Combineer een letterlijk voorvoegsel met een kwantificator om een gestructureerd token te extraheren, zoals een order-id:

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

De juiste functie kiezen

Gebruik deze tabel om de functie te kiezen die overeenkomt met uw doel.

U wilt... Gebruik
Test of een tekenreeks overeenkomt. rlike / Regexp / regexp_like
Retourneert de eerste overeenkomende subtekenreeks. regexp_substr
Retourneert een capture-groep. regexp_extract
Alle overeenkomsten retourneren. regexp_extract_all
De positie van een overeenkomst retourneren. regexp_instr
Het aantal overeenkomsten tellen. regexp_count
Vervang overeenkomsten door andere tekst. regexp_vervangen
Splits een tekenreeks rond overeenkomsten. split
Dit komt overeen met een eenvoudig _ / % patroon. Als / Ilike