Regulární výrazy

Platí pro:označeno jako ano Databricks SQL označeno jako ano Databricks Runtime

Regulární výraz (regex) je vzor, který popisuje sadu řetězců. Několik Azure Databricks funkcí a operátorů SQL bere regulární výraz tak, aby odpovídal, vyhledaly, vyhledaly, extrahovali, nahradili nebo rozdělili text:

Operátory like a ilikenepoužívají regulární výrazy. Používají jednodušší jazyk vzorů založený na _ jazyce a %.

Modul Regulárních výrazů

Azure Databricks vyhodnotí regulární výrazy pomocí modulu Javajava.util.regex. Vzory musí dodržovat Java syntaxi regulárního výrazu, která je široce kompatibilní s regulárními výrazy ve stylu Perl, ale v některých podrobnostech se liší. Úplný a autoritativní odkaz najdete v dokumentaci ke Java Pattern třídě.

Následující části popisují nejčastěji používané konstrukce.

Třídy znaků

Vytvořit Shody
. Libovolný jeden znak s výjimkou ukončovače řádku (pokud s není nastaven příznak).
[abc] Libovolný z uvedených znaků: a, bnebo c.
[^abc] Libovolný jediný znak, který nenía, bnebo c.
[a-z] Libovolný znak v rozsahu az.
\d, \D Číslice ([0-9]); \D odpovídá libovolné neciferné číslici.
\w, \W Znak slova ([a-zA-Z_0-9]); \W odpovídá libovolnému neslovně danému znaku.
\s, \S Prázdný znak; \S odpovídá jakémukoli jinému než prázdnému znaku.

Ukotvení a hranice

Vytvořit Shody
^ Začátek vstupu (nebo řádku s příznakem m ).
$ Konec vstupu (nebo řádku s příznakem m ).
\b, \B Hranice slova; \B odpovídá neslovné hranici.

Kvantifikátory

Kvantifikátory určují, kolikrát se musí předchozí prvek shodovat. Ve výchozím nastavení jsou kvantifikátory greedy a co nejvíce odpovídají. Připojte ? k tomu, aby se kvantifikátor zdráhal (co nejméně), například .*?.

Vytvořit Odpovídá předchozímu prvku...
* Nula nebo vícekrát.
+ Jednou nebo vícekrát.
? Nula nebo jednou.
{n} Přesně n časy.
{n,} Alespoň n jednou.
{n,m} Mezi n a m časy.

Skupiny a alternace

Vytvořit Description
(...) Zachytávání skupiny. Použijte index skupiny s regexp_extract.
(?:...) Skupina, která se nezachytává. Skupiny bez zachycení shody.
a\|b Střídání. Odpovídá buď a nebo b.

Vložené příznaky

Na začátek vzoru umístěte příznak, abyste změnili způsob shody celého vzoru.

Flag Effect
(?i) Porovnávání nerozlišující malá a velká písmena.
(?s) Dotall mode. . odpovídá ukončovacím čarům.
(?m) Víceřádkový režim. ^ a $ shodovat se při konců řádků.
(?x) Režim komentářů Přeskočí prázdné znaky v modelu.

Například (?i)ste(v\|ph)en odpovídá Steven, stevena STEPHEN to bez ohledu na případ.

Escaping and string literals

Chcete-li spárovat znak, který je také metacharakter regulárního výrazu (například ., *, (, [nebo \), předchází zpětné lomítko. Například \. odpovídá literálové tečkě a \\ odpovídá zpětnému lomítku literálu.

Vzhledem k tomu, že zpětné lomítko je také řídicí znak v běžných řetězcových literálech SQL, musíte každé zpětné lomítko, které chcete předat modulu regulárních výrazů. Pokud chcete například předat vzor \d+ funkci, napište ho jako '\\d+' v běžném řetězcovém literálu.

Chcete-li předejít tomuto dvojitému úniku, použijte raw-literal předzpracovánír (předpona), která zakáže předběžné zpracování řídicího znaku. V nezpracovaných literálech napište vzor přesně tak, jak ho očekává modul regulárních výrazů:

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

Obvyklé scénáře

Následující vzory se týkají častých úloh. Zapisují se jako nezpracované literály , aby zpětná lomítka prošla do modulu regulárních výrazů beze změny. Vzory e-mailů, adres URL a IP adres jsou záměrně jednoduché ilustrace, nikoli striktní validátory.

Goal Pattern
Celé číslo, volitelně podepsané r'-?\d+'
Desetinné číslo r'-?\d+(\.\d+)?'
Slovo r'\w+'
Jenom celé slovo cat r'\bcat\b'
E-mailová adresa (jednoduchá) r'[\w.%+-]+@[\w.-]+\.\w{2,}'
Hostování v adrese URL r'https?://([^/]+)'
Adresa IPv4 (nekontroluje 0–255) r'\d{1,3}(\.\d{1,3}){3}'
Datum ISO (YYYY-MM-DD) r'\d{4}-\d{2}-\d{2}'
Mezery na začátku nebo na konci r'^\s+\|\s+$'
Telefonní číslo v USA (jednoduché) r'\d{3}-\d{3}-\d{4}'

Word hranice (\b) odpovídají celému word místo podřetězce:

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

Zkombinujte předponu literálu s kvantifikátorem a extrahujte strukturovaný token, například ID objednávky:

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

Volba správné funkce

Pomocí této tabulky vyberte funkci, která odpovídá vašemu cíli.

Chceš... Používání
Otestujte, jestli se řetězec shoduje. rlike / Regexp / regexp_like
Vrátí první odpovídající podřetětěr. regexp_substr
Vrátí skupinu zachycení. regexp_extract
Vrátí všechny shody. regexp_extract_all
Vrátí pozici shody. regexp_instr
Spočítejte počet shod. regexp_count
Nahraďte shody jiným textem. regexp_replace
Rozdělte řetězec kolem shod. split
Porovná jednoduchý _ / % vzor. Jako / Ilike