Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
Databricks SQL
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:
- rlike-operator en regexp-operator : test of een tekenreeks overeenkomt met een patroon.
- regexp_like functie: test of een tekenreeks overeenkomt met een patroon.
- regexp_count functie: tellen hoe vaak een patroon overeenkomt.
- regexp_instr functie: retourneer de positie van de eerste overeenkomst.
- regexp_substr functie: retourneert de eerste overeenkomende subtekenreeks.
- regexp_extract - en regexp_extract_all-functies : retourneert een capturegroep van de eerste overeenkomst of van alle overeenkomsten.
- regexp_replace functie: vervang overeenkomsten door een vervangende tekenreeks.
- splitsfunctie : splits een tekenreeks rond overeenkomsten van een patroon.
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 |