Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:
Databricks SQL
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:
- rlike-operator och regexp-operator : testa om en sträng matchar ett mönster.
- regexp_like funktion: testa om en sträng matchar ett mönster.
- regexp_count funktion: räkna hur många gånger ett mönster matchar.
- regexp_instr funktion: returnera positionen för den första matchningen.
- regexp_substr funktion: returnera den första matchande delsträngen.
- regexp_extract och regexp_extract_all funktioner: returnera en avbildningsgrupp från den första matchningen eller från alla matchningar.
- regexp_replace funktion: ersätt matchningar med en ersättningssträng.
- split-funktion : dela en sträng runt matchningar i ett mönster.
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 |