Reguláris kifejezések

A következőkre vonatkozik:jelölje be az igennel jelölt jelölőnégyzetet Databricks SQL jelölje be az igennel jelölt jelölőnégyzetet Databricks Runtime

A regex (regex) egy sztringkészletet leíró minta. Számos Azure Databricks SQL-függvény és operátor egy reguláris kifejezést alkalmaz a szöveg egyeztetéséhez, kereséséhez, megszámlálásához, kinyeréséhez, cseréjéhez vagy felosztásához:

  • rlike operátor és regexp operátor: tesztelje, hogy egy sztring megfelel-e egy mintának.
  • regexp_like függvény: annak tesztelése, hogy egy sztring megfelel-e egy mintának.
  • regexp_count függvény: megszámolja, hogy egy minta hányszor egyezik meg.
  • regexp_instr függvény: az első egyezés pozícióját adja vissza.
  • regexp_substr függvény: az első egyező részszűrést adja vissza.
  • regexp_extract és regexp_extract_all függvények: egy rögzítési csoportot ad vissza az első egyezésből vagy az összes egyezésből.
  • regexp_replace függvény: cserélje le a találatokat egy helyettesítő sztringre.
  • split függvény: sztring felosztása egy minta egyezései köré.

A hasonló és az ilikeoperátorok nem használnak reguláris kifejezéseket. Egyszerűbb mintanyelvet használnak az és %a _ .

Regex motor

Azure Databricks a Java java.util.regex motorral kiértékeli a reguláris kifejezéseket. A mintáknak Java reguláris kifejezés szintaxisát kell követnie, amely széles körben kompatibilis a Perl-stílusú reguláris kifejezésekkel, de bizonyos részletekben eltér. A teljes és mérvadó hivatkozásért tekintse meg az Java Pattern osztály dokumentációját.

A következő szakaszok a leggyakrabban használt szerkezeteket ismertetik.

Karakterosztályok

Épít Egyezések
. Bármely karakter, kivéve a vonal-terminátort (kivéve, ha a s jelölő be van állítva).
[abc] A felsorolt karakterek bármelyike: a, bvagy c.
[^abc] Minden olyan karakter, amely nema, bvagy c.
[a-z] A tartomány a bármely karaktere.z
\d, \D A számjegy ([0-9]); \D bármely nem számjegynek megfelelő.
\w, \W Egy szó karakter ([a-zA-Z_0-9]); \W egyezik a nem szó karakterrel.
\s, \S A whitespace karakter; \S egyezik a nem térbeli karakterrel.

Horgonyok és határok

Épít Egyezések
^ A bemenet (vagy a jelölővel ellátott m sor) kezdete.
$ A bemenet vége (vagy egy jelölővel ellátott m sor).
\b, \B Szóhatár; \B nem szóhatárnak felel meg.

Kvantitátorok

A kvantátorok megadják, hogy az előző elemnek hányszor kell egyeznie. Alapértelmezés szerint a kvantátorok kapzsiak , és a lehető legnagyobb mértékben egyeznek. Hozzáfűzés ? a kvantálók vonakodásához (a lehető legkisebb egyezéshez), például .*?.

Épít Megfelel az előző elemnek...
* Nulla vagy több alkalommal.
+ Egy vagy több alkalommal.
? Nulla vagy egyszer.
{n} Pontosan n az időket.
{n,} Legalább n időnként.
{n,m} Között n és m időpontban.

Csoportok és váltakozás

Épít Description
(...) Egy rögzítési csoport. Használja a csoportindexet regexp_extract.
(?:...) Nem rögzített csoport. Csoportok a találat rögzítése nélkül.
a\|b Váltakozás. Egyezések vagy ab.

Beágyazott jelzők

Helyezzen egy jelölőt a minta elejére a teljes minta egyeztetésének módosításához.

Flag Effect
(?i) Kis- és nagybetűk megkülönböztetése.
(?s) Dotall mód. . egyezik a sor terminátoraival.
(?m) Többsoros mód. ^ és $ egyezzen a sortörések között.
(?x) Megjegyzések mód. Figyelmen kívül hagyja a nem kibontott szóközt a mintában.

Például egyezésekSteven(?i)ste(v\|ph)en, stevenés STEPHEN esettől függetlenül.

Menekülés és sztringkonstansok

Ha egy regex metacharacter (például ., *, (, [, vagy \) karaktert is meg szeretne egyezni, akkor azt fordított perjel előzi meg. Például \. egy literál pontnak felel meg, és \\ egy literális fordított perjelet.

Mivel a fordított perjel a szokásos SQL-sztringkonstansokban is a feloldó karakter, minden olyan fordított perjelet meg kell dupláznia, amelyet át szeretne adni a regex motornak. Ha például egy függvénynek szeretné átadni a mintát \d+ , írja be '\\d+' egy normál sztringkonstansba.

A kettős menekülés elkerülése érdekében használjon egy raw-literal (r előtag) előtagot, amely letiltja a escape-character előfeldolgozást. Nyers literálban írja be a mintát pontosan úgy, ahogy a regex motor elvárja:

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

Gyakori minták

Az alábbi minták a gyakori feladatokat fedik le. Nyers literálként vannak megírva, hogy a fordított perjelek változatlanul áthaladjanak a regex motoron. Az e-mail-, URL-cím- és IP-minták szándékosan egyszerű illusztrációk, nem szigorú érvényesítők.

Célkitűzés Pattern
Egész szám, opcionálisan aláírt r'-?\d+'
Decimális szám r'-?\d+(\.\d+)?'
Egy szó r'\w+'
Csak az egész szó cat r'\bcat\b'
E-mail-cím (egyszerű) r'[\w.%+-]+@[\w.-]+\.\w{2,}'
Gazdagép URL-címben r'https?://([^/]+)'
IPv4-cím (nem ellenőrzi a 0–255-öt) r'\d{1,3}(\.\d{1,3}){3}'
ISO-dátum (YYYY-MM-DD) r'\d{4}-\d{2}-\d{2}'
Kezdő vagy záró szóköz r'^\s+\|\s+$'
Amerikai telefonszám (egyszerű) r'\d{3}-\d{3}-\d{4}'

Word határok (\b) egy egész word egyeznek meg ahelyett, hogy alávonást használnak:

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

Konstans előtag és kvantáló kombinálása strukturált jogkivonat, például rendelésazonosító kinyeréséhez:

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

A megfelelő függvény kiválasztása

Ezzel a táblával kiválaszthatja a célnak megfelelő függvényt.

Azt szeretné, hogy... Használd
Ellenőrizze, hogy egy sztring egyezik-e. rlike / Regexp / regexp_like
Adja vissza az első egyező részstringet. regexp_substr
Rögzítési csoportot ad vissza. regexp_extract
Adja vissza az összes egyezést. regexp_extract_all
Egyezés pozíciójának visszaadása. regexp_instr
Az egyezések számának megszámlálása. regexp_count
Cserélje le a találatokat más szövegre. regexp_replace
Sztring felosztása egyezések köré. split
Egyezik egy egyszerű _ / % mintával. Mint / ilike