Ekspresi Reguler

Berlaku untuk:Ditandai centang ya Databricks SQL Ditandai centang ya Databricks Runtime

Ekspresi reguler (regex) adalah pola yang menjelaskan sekumpulan string. Beberapa Azure Databricks fungsi dan operator SQL mengambil ekspresi reguler untuk mencocokkan, menemukan, menghitung, mengekstrak, mengganti, atau memisahkan teks:

Operator suka dan iliketidak menggunakan ekspresi reguler. Mereka menggunakan bahasa pola yang lebih sederhana berdasarkan _ dan %.

Mesin regex

Azure Databricks mengevaluasi ekspresi reguler menggunakan mesin Javajava.util.regex. Pola harus mengikuti sintaks ekspresi reguler Java, yang secara luas kompatibel dengan ekspresi reguler gaya Perl tetapi berbeda dalam beberapa detail. Untuk referensi lengkap dan otoritatif, lihat dokumentasi kelas JavaPattern.

Bagian berikut menjelaskan konstruksi yang paling umum digunakan.

Kelas karakter

Membangun Pencocokan
. Setiap karakter tunggal kecuali terminator baris (kecuali s bendera diatur).
[abc] Salah satu karakter yang tercantum: a, , batau c.
[^abc] Setiap karakter tunggal yang tidaka, b, atau c.
[a-z] Setiap karakter dalam rentang a melalui z.
\d, \D Digit ([0-9]); \D cocok dengan non-digit apa pun.
\w, \W Karakter kata ([a-zA-Z_0-9]); \W cocok dengan karakter non-kata apa pun.
\s, \S Karakter spasi putih; \S cocok dengan karakter non-spasi kosong.

Jangkar dan batasan

Membangun Pencocokan
^ Awal input (atau baris dengan m bendera).
$ Akhir input (atau baris dengan m bendera).
\b, \B Batas kata; \B cocok dengan batas non-kata.

Pembilang

Kuantifier menentukan berapa kali elemen sebelumnya harus cocok. Secara default, kuantifier serakah dan cocok sebanyak mungkin. Tambahkan ? untuk membuat kuantifier enggan (cocokkan sesedikit mungkin), misalnya .*?.

Membangun Cocok dengan elemen sebelumnya...
* Nol kali atau lebih.
+ Satu atau beberapa kali.
? Nol atau satu kali.
{n} Tepat n waktu.
{n,} Setidaknya berkali-kali n .
{n,m} Antara n dan m waktu.

Grup dan pergantian

Membangun Description
(...) Grup penangkap. Gunakan indeks grup dengan regexp_extract.
(?:...) Grup yang tidak menangkap. Grup tanpa menangkap kecocokan.
a\|b Pergantian. Cocok baik a atau b.

Bendera sebaris

Tempatkan bendera di awal pola untuk mengubah bagaimana seluruh pola dicocokkan.

Flag Efek
(?i) Pencocokan yang Tidak Peka Huruf Besar/Kecil.
(?s) Mode dotall. . cocok dengan terminator garis.
(?m) Mode Baris Ganda. ^ dan $ cocokkan pada jeda baris.
(?x) Mode komentar. Mengabaikan spasi kosong yang tidak dilewati dalam pola.

Misalnya, (?i)ste(v\|ph)en cocok Stevendengan , steven, dan STEPHEN terlepas dari kasusnya.

Pelepasan dan string literal

Untuk mencocokkan karakter yang juga merupakan metacharacter regex (seperti ., , *, ([, atau \), mendahuluinya dengan garis miring terbalik. Misalnya, \. cocok dengan periode harfiah, dan \\ cocok dengan garis miring terbelakang harfiah.

Karena garis miring terbelakang juga merupakan karakter escape dalam literal string SQL biasa, Anda harus menggandakan setiap garis miring terbelakang yang ingin Anda teruskan ke mesin regex. Misalnya, untuk meneruskan pola \d+ ke fungsi, tulis seperti '\\d+' dalam literal string reguler.

Untuk menghindari pelepasan ganda ini, gunakan raw-literal (r awalan), yang menonaktifkan praproses karakter escape. Dalam literal mentah, tulis pola persis seperti yang diharapkan mesin regex:

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

Pola umum

Pola berikut mencakup tugas yang sering. Mereka ditulis sebagai literal mentah sehingga garis miring terbalik melewati ke mesin regex tidak berubah. Pola email, URL, dan IP sengaja merupakan ilustrasi sederhana, bukan validator yang ketat.

Maksud Pattern
Bilangan bulat, ditandatangani secara opsional r'-?\d+'
Bilangan desimal r'-?\d+(\.\d+)?'
Sebuah kata r'\w+'
Seluruh kata cat saja r'\bcat\b'
Alamat email (sederhana) r'[\w.%+-]+@[\w.-]+\.\w{2,}'
Host dalam URL r'https?://([^/]+)'
Alamat IPv4 (tidak memeriksa 0–255) r'\d{1,3}(\.\d{1,3}){3}'
Tanggal ISO (YYYY-MM-DD) r'\d{4}-\d{2}-\d{2}'
Spasi awal atau akhir r'^\s+\|\s+$'
Nomor telepon AS (sederhana) r'\d{3}-\d{3}-\d{4}'

Word batas (\b) cocok dengan seluruh word daripada substring:

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

Gabungkan awalan harfiah dengan kuantifier untuk mengekstrak token terstruktur, seperti ID pesanan:

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

Pilih fungsi yang tepat

Gunakan tabel ini untuk memilih fungsi yang cocok dengan tujuan Anda.

Anda ingin ... Gunakan
Uji apakah string cocok. rlike / regexp / regexp_like
Mengembalikan substring pencocokan pertama. regexp_substr
Mengembalikan grup pengambilan. regexp_extract
Mengembalikan semua kecocokan. regexp_extract_all
Mengembalikan posisi kecocokan. regexp_instr
Hitung jumlah kecocokan. regexp_count
Ganti kecocokan dengan teks lain. penggantian_regexp
Pisahkan string di sekitar kecocokan. split
Cocokkan pola sederhana _ / % . Seperti / Ilike