Reguljära uttryck

gäller för:markerad med ja Databricks SQL markerad med ja Databricks Runtime

Ett reguljärt uttryck (regex) är ett mönster som beskriver en uppsättning strängar. Flera Azure Databricks SQL-funktioner och operatorer använder ett reguljärt uttryck för att matcha, hitta, räkna, extrahera, ersätta eller dela text:

Operatorerna like och ilike använder inte reguljära uttryck. De använder ett enklare mönsterspråk baserat på _ och %.

Regex-motor

Azure Databricks utvärderar reguljära uttryck med hjälp av motorn Javajava.util.regex. Mönster måste följa Java syntax för reguljära uttryck, vilket i stort sett är kompatibelt med reguljära uttryck i Perl-stil men skiljer sig åt i viss information. Fullständig och auktoritativ referens finns i dokumentationen om Java-klassenPattern.

I följande avsnitt beskrivs de vanligaste konstruktionerna.

Teckenklasser

Konstruera Matcher
. Ett enskilt tecken utom en radavgränsare (såvida inte s flaggan har angetts).
[abc] Något av de angivna tecknen: a, beller c.
[^abc] Ett enskilt tecken som intea är , beller c.
[a-z] Alla tecken i intervallet a via z.
\d, \D En siffra ([0-9]); \D matchar alla icke-siffror.
\w, \W Ett ordtecken ([a-zA-Z_0-9]); \W matchar alla tecken som inte är ord.
\s, \S Ett blankstegstecken; \S matchar alla tecken som inte är blanksteg.

Fästpunkter och gränser

Konstruera Matcher
^ Början av indata (eller av en rad med m flaggan).
$ Slutet på indata (eller en rad med m flaggan).
\b, \B En ordgräns; \B matchar en gräns som inte är ord.

Kvantifierare

Kvantifierare anger hur många gånger föregående element måste matcha. Som standard är kvantifierare giriga och matchar så mycket som möjligt. ? Lägg till för att göra en kvantifierare motvillig (matcha så lite som möjligt), till exempel .*?.

Konstruera Matchar föregående element...
* Noll eller fler gånger.
+ En eller flera gånger.
? Noll eller en gång.
{n} Exakt n gånger.
{n,} Minst n gånger.
{n,m} Mellan n och m gånger.

Grupper och alternation

Konstruera Description
(...) En samlande grupp. Använd gruppindexet med regexp_extract.
(?:...) En grupp som inte samlar in. Grupper utan att fånga matchningen.
a\|b Växlingen. Matchar antingen a eller b.

Infogade flaggor

Placera en flagga i början av mönstret för att ändra hur hela mönstret matchas.

Flag Effect
(?i) Skiftlägesokänslig matchning.
(?s) Dotall-läge. . matchar radavgränsare.
(?m) Flerradsläge. ^ och $ matcha vid radbrytningar.
(?x) Kommentarsläge. Ignorerar ej inkapslade blanksteg i mönstret.

Matchar till exempel (?i)ste(v\|ph)enSteven, stevenoch STEPHEN oavsett fall.

Undantag och strängliteraler

Om du vill matcha ett tecken som också är ett regex-metadiagram (till exempel ., , *(, [eller \), föregår du det med ett omvänt snedstreck. Matchar till exempel \. en literalperiod och \\ matchar ett literalt omvänt snedstreck.

Eftersom ett omvänt snedstreck också är escape-tecknet i vanliga SQL-strängliteraler måste du dubbla varje omvänt snedstreck som du tänker skicka till regex-motorn. Om du till exempel vill skicka mönstret \d+ till en funktion skriver du det som '\\d+' i en vanlig strängliteral.

För att undvika den här dubbla utrymningen använder du ett raw-literal (r prefix), som inaktiverar escape-character-förbearbetning. Skriv mönstret exakt som regex-motorn förväntar sig i en råliteral:

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

Vanliga mönster

Följande mönster omfattar vanliga uppgifter. De skrivs som råa literaler så att omvänt snedstreck passerar till regexmotorn oförändrad. E-post-, URL- och IP-mönster är avsiktligt enkla illustrationer, inte strikta validatorer.

Mål Pattern
Heltal, eventuellt signerat r'-?\d+'
Decimalnummer r'-?\d+(\.\d+)?'
Ett ord r'\w+'
Hela ordet cat bara r'\bcat\b'
E-postadress (enkel) r'[\w.%+-]+@[\w.-]+\.\w{2,}'
Värd i en URL r'https?://([^/]+)'
IPv4-adress (kontrollerar inte 0–255) r'\d{1,3}(\.\d{1,3}){3}'
ISO-datum (YYYY-MM-DD) r'\d{4}-\d{2}-\d{2}'
Inledande eller avslutande blanksteg r'^\s+\|\s+$'
Telefonnummer i USA (enkelt) r'\d{3}-\d{3}-\d{4}'

Word gränser (\b) matchar en hel word i stället för en delsträng:

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

Kombinera ett literalprefix med en kvantifierare för att extrahera en strukturerad token, till exempel ett order-ID:

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

Välj rätt funktion

Använd den här tabellen för att välja den funktion som matchar ditt mål.

Du vill... Använd
Testa om en sträng matchar. rlike / Regexp / regexp_like
Returnera den första matchande delsträngen. regexp_substr
Returnera en avbildningsgrupp. regexp_extract
Returnera alla matchningar. regexp_extract_all
Returnera positionen för en matchning. regexp_instr
Räkna antalet matchningar. regexp_count
Ersätt matchningar med annan text. regexp_replace
Dela en sträng runt matchningar. split
Matcha ett enkelt _ / % mönster. som / Ilike