Ekspresi Reguler

Berlaku untuk: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

Artikel ini memperkenalkan ekspresi reguler untuk SQL Server.

Ekspresi reguler, atau regex, adalah urutan karakter yang menentukan pola pencarian untuk teks. Regex umumnya digunakan untuk berbagai tugas termasuk pencocokan pola, validasi data, transformasi data, dan kueri. Ini menawarkan cara yang fleksibel dan efisien untuk mencari, memanipulasi, dan menangani operasi data yang kompleks.

Note

Ekspresi reguler tersedia di Azure SQL Managed Instance dengan kebijakan pembaruanSQL Server 2025 atau Always-up-to-date.

Implementasi ekspresi reguler ini didasarkan pada pustaka ekspresi reguler RE2. Untuk informasi selengkapnya, kunjungi Sintaks Ekspresi Reguler RE2.

Fungsi regex yang didukung:

Function Description
REGEXP_LIKE Mengembalikan nilai Boolean yang menunjukkan apakah input teks cocok dengan pola regex.
REGEXP_REPLACE Mengembalikan string sumber yang dimodifikasi digantikan oleh string pengganti, di mana kemunculan pola regex ditemukan.
REGEXP_SUBSTR Mengekstrak bagian string berdasarkan pola ekspresi reguler.

Mengembalikan kemunculan Nth dari substring yang cocok dengan pola regex.
REGEXP_INSTR Mengembalikan posisi awal atau akhir substring yang cocok, tergantung pada opsi yang disediakan.
REGEXP_COUNT Mengembalikan hitungan berapa kali pola regex terjadi dalam string.
REGEXP_MATCHES Mengembalikan tabel yang berisi substring yang ditangkap dan cocok dengan pola ekspresi reguler dalam sebuah string. Jika tidak ada kecocokan yang ditemukan, fungsi tidak mengembalikan baris.
REGEXP_SPLIT_TO_TABLE Mengembalikan tabel string yang dipisahkan, dibatasi oleh pola regex. Jika tidak ada kecocokan dengan pola, fungsi mengembalikan string.

Ekspresi reguler dapat terdiri dari karakter harfiah dan metakarakter, yang memiliki arti dan fungsi khusus.

Ekspresi reguler dasar adalah karakter literal tunggal. Karakter akan cocok dengan dirinya sendiri, kecuali metakarakter. Metakarakter meliputi *, , +, ?, (), atau |. Untuk mencocokkan metakarakter, awali dengan backslash. Misalnya, \* cocok dengan karakter tanda bintang harfiah (*).

Dua ekspresi reguler dapat diubah atau digabungkan untuk membentuk ekspresi reguler baru: jika e1 cocok dengan s dan e2 cocok dengan t, maka e1 | e2 cocok s atau t, dan e1e2 cocok dengan st.

Metacharacters *, +, dan ? adalah operator pengulangan: e1* cocok dengan urutan string nol atau lebih (mungkin berbeda), yang masing-masing cocok dengan e1; e1 + cocok dengan satu atau beberapa; e1? cocok dengan nol atau satu.

Prioritas operator, dari yang paling lemah hingga yang paling kuat, adalah sebagai berikut: - Alternasi - Konkatenasi - Operator pengulangan

Tanda kurung eksplisit dapat digunakan untuk memaksa arti yang berbeda, seperti dalam ekspresi aritmatika. Beberapa contoh: ab|cd setara dengan (ab)|(cd) ; ab setara dengan a(b).

Untuk informasi selengkapnya tentang sintaks ekspresi reguler yang diterima oleh RE2, lihat
Sintaks Ekspresi Reguler RE2. Halaman ini juga mencantumkan beberapa sintaks yang diterima oleh PCRE, Perl, dan Vim.

Karakter ekspresi reguler yang diterima

Ekspresi karakter tunggal

Jenis ekspresi karakter tunggal Examples
karakter apa saja, kemungkinan termasuk newline (s=true) .
character class [xyz]
kelas karakter yang dinegasikan [^xyz]
Kelas karakter dalam bahasa Perl \d
kelas karakter Perl yang dinegasikan \D
Kelas karakter ASCII [[:alpha:]]
kelas karakter ASCII yang dinegasikan [[:^alpha:]]
Kelas karakter Unicode (nama satu huruf) \pN
Kelas karakter Unicode \p{Greek}
kelas karakter Unicode yang dinegasikan (nama satu huruf) \PN
kelas karakter Unicode yang dinegasikan \P{Greek}
Komposit Description
xy x diikuti oleh y
x | y x atau y (lebih suka x)
Pengulangan Description
x* nol atau lebih x, utamakan lebih banyak
x+ satu atau lebih x, pilih lebih banyak
x? nol atau satu x, lebih suka satu
x{n,m} n atau n+1 atau ... atau m x, lebih suka lebih banyak
x{n,} n atau lebih x, lebih suka lebih banyak
x{n} tepat n x
x*? nol atau lebih x, sebaiknya lebih sedikit
x+? satu atau beberapa x, sebaiknya lebih sedikit
x?? nol atau satu x, lebih suka nol
x{n,m}? n atau n+1 atau ... atau m x, lebih suka lebih sedikit
x{n,}? n atau lebih x, pilih yang lebih sedikit
x{n}? tepat n x

Note

Bentuk penghitungan x{n,m}, x{n,}, dan x{n} menolak bentuk yang menghasilkan jumlah pengulangan minimum atau maksimum di atas 1.000. Pengulangan tidak terbatas tidak tunduk pada pembatasan ini.

Kelas karakter Perl

Tabel berikut ini mencantumkan kelas karakter Perl yang saat ini didukung.

Kelas karakter Perl (semua khusus ASCII) Description
\d digit ( [0-9])
\D bukan digit ( [^0-9])
\s spasi kosong ( [\t\n\f\r ])
\S bukan spasi kosong ( [^\t\n\f\r ])
\w karakter dalam kata ( [0-9A-Za-z_])
\W bukan karakter kata ( [^0-9A-Za-z_])

Kelas karakter ASCII

Tabel berikut ini mencantumkan kelas karakter ASCII yang saat ini didukung.

Kelas karakter ASCII Description
[[:alnum:]] alfanumerik ( [0-9A-Za-z])
[[:alpha:]] alfabet ( [A-Za-z])
[[:ascii:]] ASCII ( [\x00-\x7F])
[[:blank:]] kosong ( [\t ])
[[:cntrl:]] kendali ([\x00-\x1F\x7F])
[[:digit:]] digit ( [0-9])
[[:graph:]] grafis ( [!-~] atau [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]] huruf kecil ( [a-z])
[[:print:]] dapat dicetak ( [ -~] atau [ [:graph:]])
[[:punct:]] tanda baca ( [!-/:-@[-\``{-~])
[[:space:]] spasi kosong ( [\t\n\v\f\r ])
[[:upper:]] huruf besar ( [A-Z])
[[:word:]] karakter dalam kata ( [0-9A-Za-z_])
[[:xdigit:]] digit hex ( [0-9A-Fa-f])

Karakter literal

  • Letters
  • Numbers
  • Symbols

String kosong

String kosong Description
^ Di awal teks atau baris (m=true)
$ Di akhir teks (seperti \z, bukan \Z) atau baris (m=true)
\A Di awal teks
\b Pada batas kata ASCII (\w di satu sisi dan \W, \A, atau \z di sisi lain)
\B Tidak pada batas kata ASCII
\z Di akhir teks

Groupings

Grup tangkapan (subekspresi) dari pola dengan:

Pengelompokan Description
(re) Grup penangkap bernomor (submatch)
(?P<name>re) Grup penangkap bernama dan bernomor (submatch)
(?:re) Grup yang tidak menangkap
(?<flags>) Atur <flags> dalam grup saat ini; tidak menangkap
(?<flags>:re) Atur <flags> selama re; tidak menangkap Pengelompokan

Flags

Gunakan bendera untuk mengubah perilaku ekspresi. Contohnya:

Flag Description
i Tidak membedakan huruf besar/kecil (default false)
m Mode multi-baris: ^ dan $ mencocokkan awal/akhir baris selain awal/akhir teks (default false)
s Biarkan . cocok \n (default false)
c Peka huruf besar/kecil (default true)

Implementasi ini mendukung standar ekspresi reguler POSIX mengikuti RE2, dan mendukung sintaks ekspresi reguler jenis PCRE/PCRE2 yang kompatibel dengan sebagian besar mesin dan alat ekspresi reguler modern. Ada berbagai jenis ekspresi reguler, seperti POSIX, ANSI, Perl, dan PCRE, yang memiliki sintaks dan fitur berbeda. Untuk informasi selengkapnya tentang konstruksi yang didukung dan perilaku mesin regex yang mendasarinya, lihat RE2, pustaka ekspresi reguler.

Note

Pencocokan ekspresi reguler di SQL Server tidak menghormati kolase SQL untuk perbandingan linguistik. Perilaku ini dirancang dan konsisten dengan sebagian besar mesin ekspresi reguler, karena pencocokan didasarkan pada pola dan properti karakter Unicode daripada aturan kolase. Akibatnya, hal ini dapat menyebabkan perbedaan perilaku jika dibandingkan dengan fungsi perbandingan string lain seperti LIKE, terutama pada kolom terindeks dengan kolase khusus bahasa.

Requirements

  • Alat klien SQL, seperti SQL Server Management Studio atau Visual Studio Code.
  • Pengetahuan dasar tentang sintaks dan kueri SQL.
  • Pemahaman dasar tentang sintaks dan konsep ekspresi reguler.

FAQ

Apa dampak performa menggunakan regex?

Kueri regex dapat memiliki dampak performa tergantung pada kompleksitas pola regex, ukuran data teks, dan jumlah baris yang terlibat. Anda dapat menggunakan rencana dan statistik eksekusi untuk memantau dan mengoptimalkan performa kueri regex Anda.

Keterbatasan

Batasan berikut saat ini berlaku:

  • Jenis data LOB (varchar(max) atau nvarchar(max)) untuk string_expression didukung di semua REGEXP_* fungsi, tetapi ukuran input dibatasi hingga 2 MB.
  • Fungsi ekspresi reguler tidak didukung dalam prosedur tersimpan yang dikompilasi secara asli.