RLIKE adalah operator yang disediakan oleh MaxCompute SQL berdasarkan standar Perl Compatible Regular Expressions (PCRE). Operator ini digunakan untuk melakukan pencocokan pola atau penggantian yang lebih akurat dan kompleks dalam MaxCompute SQL. Topik ini menjelaskan metakarakter yang didukung oleh RLIKE, kelompok karakter POSIX, kelompok karakter Cina, serta karakter escape, beserta contoh terkait.
Metakarakter
Operator RLIKE mendukung berbagai metakarakter. Tabel berikut menjelaskan metakarakter umum yang didukung oleh RLIKE.
Metakarakter | Deskripsi |
^ | Cocok dengan awal dari sebuah string. |
$ | Cocok dengan akhir dari sebuah string. |
. | Cocok dengan karakter tunggal apa pun. |
* | Cocok dengan karakter sebelumnya atau pola karakter nol kali atau lebih. |
+ | Cocok dengan karakter sebelumnya atau pola karakter satu kali atau lebih. |
? |
|
A|B | Cocok dengan A atau B. |
(abc)* | Cocok dengan urutan abc nol kali atau lebih. |
{n} atau {m,n} | Jumlah kecocokan. {n} merepresentasikan jumlah kecocokan yang tepat, dan {m,n} merepresentasikan rentang jumlah kecocokan. |
[ab] | Cocok dengan karakter apa pun di dalam tanda kurung. |
[a-d] | Cocok dengan salah satu karakter berikut: a, b, c, dan d. |
[^ab] | ^ menunjukkan NOT. Ekspresi ini cocok dengan karakter apa pun yang bukan a atau b. |
[::] | Untuk informasi lebih lanjut, lihat kelompok karakter POSIX nanti dalam topik ini. |
\ | Karakter escape. Untuk informasi lebih lanjut, lihat Pencocokan karakter escape nanti dalam topik ini. |
\n | n adalah angka dari 1 hingga 9 dan menunjukkan referensi balik. |
\d | Digit. |
\D | Karakter non-digit. |
Untuk informasi lebih lanjut tentang ekspresi reguler, lihat dokumentasi PCRE.
Jika hasil pencocokan tidak sesuai dengan harapan, lihat pencocokan karakter escape untuk mengevaluasi apakah karakter escape diperlukan.
Contoh
Pencocokan aturan umum
Cocok dengan awal dan akhir dari sebuah string
-- Cocokkan apakah awal dari string aa123bb adalah a. true dikembalikan. SELECT 'aa123bb' RLIKE '^a'; -- Cocokkan awal dari string aa123bb dengan a dan akhir dari string aa123bb dengan b. true dikembalikan. SELECT 'aa123bb' RLIKE '^a.*b$'; -- Cocokkan apakah string footerbar berisi foo dan bar secara berurutan. true dikembalikan. SELECT 'footerbar' RLIKE 'foo(.*?)(bar)'; -- Cocokkan apakah string footerbar dimulai dengan foo dan diakhiri dengan bar. true dikembalikan. SELECT 'footerbar' RLIKE '^foo(.*?)(bar)$';Cocok dengan karakter apa pun
-- Cocokkan apakah awal dari string cc123bb adalah karakter apa pun dari a hingga d. true dikembalikan. SELECT 'cc123bb' RLIKE '^[a-d]'; -- Cocokkan apakah string 12abc34 dimulai dengan 12, diakhiri dengan 34, dan berisi setidaknya satu karakter dari a hingga d di tengah. true dikembalikan. SELECT '12abc34' RLIKE '^12[a-d]+34$';
Pencocokan karakter escape
Operator RLIKE mendukung backslash \ sebagai karakter escape. Oleh karena itu, semua karakter \ dalam pola ekspresi reguler harus diloloskan dua kali.
Contoh 1
Ekspresi reguler perlu mencocokkan string
a+b, di mana+adalah karakter khusus dalam ekspresi reguler. Oleh karena itu, harus dinyatakan sebagai karakter escape. Dalam mesin ekspresi reguler, dinyatakan sebagaia\+b. Karena diperlukan lapisan pelolosan tambahan, ekspresi yang dapat mencocokkan string ini adalaha\\+b.SELECT 'a+b' RLIKE 'a\\+b'; --Hasil berikut dikembalikan: +------+ | _c1 | +------+ | true | +------+Contoh 2
Untuk mencocokkan karakter
\, dalam mesin ekspresi reguler\adalah karakter khusus, jadi harus direpresentasikan sebagai\\, dan karena diperlukan lapisan pelolosan tambahan, ditulis sebagai\\\\.nullDalam MaxCompute SQL,
a\\bditulis, tetapia\bditampilkan dalam output. Ini karena MaxCompute meloloskan ekspresi.SELECT 'a\\b', 'a\\b' RLIKE 'a\\\b'; -- Hasil berikut dikembalikan: +-----+------+ | _c0 | _c1 | +-----+------+ | a\b | false | +-----+------+ SELECT 'a\\b', 'a\\b' RLIKE 'a\\\\b'; -- Hasil berikut dikembalikan: +-----+------+ | _c0 | _c1 | +-----+------+ | a\b | true | +-----+------+Contoh 3
Jika sebuah string berisi karakter tab (TAB), sistem telah menyimpan
\tsebagai satu karakter ketika membaca kedua karakter tersebut. Oleh karena itu, ini juga merupakan karakter biasa dalam pola ekspresi reguler.SELECT 'a\tb', 'a\tb' RLIKE 'a\tb'; -- Hasil berikut dikembalikan: +---------+------+ | _c0 | _c1 | +---------+------+ | a b | true | +---------+------+Contoh 4
Cocokkan string yang berisi digit
\d, karakter non-digit\D, dan referensi balik\n.--Cocokkan apakah awal dari string 2025maxcompute adalah digit. true dikembalikan. SELECT '2025maxcompute' RLIKE '^\\\d'; --Cocokkan apakah awal dari string maxcompute2025test adalah karakter non-digit. true dikembalikan. SELECT 'maxcompute2025test' RLIKE '^\\\D'; --Cocokkan apakah string alibaba-cloud-MC2025-test berisi kombinasi MC dan digit. true dikembalikan. SELECT 'alibaba-cloud-MC2025-test' RLIKE 'MC\\\d'; -- Cocokkan apakah string alibaba-cloud-MC2025-test berisi kombinasi MC dan empat digit. true dikembalikan. SELECT 'alibaba-cloud-MC2025-test' RLIKE 'MC\\\d{4}-'; -- Cocokkan apakah string berisi abcdefdef. true dikembalikan. -- abc adalah grup penangkap 1, def adalah grup penangkap 2, \2 merepresentasikan pencocokan ulang grup penangkap kedua, yang perlu diloloskan lagi sebagai \\\2. Yaitu, abcdefdef. SELECT 'mmabcdefdefgg' RLIKE '(abc)(def)\\\2';
Kelompok karakter
Kelompok karakter POSIX
Kelompok karakter | Deskripsi | Nilai valid |
[[:alnum:]] | Huruf dan digit | [a-zA-Z0-9] |
[[:alpha:]] | Huruf | [a-zA-Z] |
[[:ascii:]] | Karakter ASCII | [\x00-\x7F] |
[[:blank:]] | Spasi dan karakter tab | [ \t] |
[[:cntrl:]] | Karakter kontrol | [\x00-\x1F\x7F] |
[[:digit:]] | Digit | [0-9] |
[[:graph:]] | Karakter selain karakter spasi | [\x21-\x7E] |
[[:lower:]] | Huruf kecil | [a-z] |
[[:print:]] | [:graph:] dan karakter spasi | [\x20-\x7E] |
[[:punct:]] | Tanda baca | [][!"#$%&'()*+,./:;<=>? @\^_`{|}~-] |
[[:space:]] | Karakter spasi | [ \t\r\n\v\f] |
[[:upper:]] | Huruf besar | [A-Z] |
[[:xdigit:]] | Karakter heksadesimal | [A-Fa-f0-9] |
MaxCompute tidak mendukung \f dan \v. Untuk informasi lebih lanjut tentang karakter escape yang didukung, lihat Karakter Escape.
Kelompok karakter Cina
Kelompok karakter | Nilai valid |
Karakter dua-byte seperti karakter Cina | [^\\x{00}-\\x{ff}] |
Karakter Cina | [\\x{4e00}-\\x{9fa5}] |
Tanda baca Cina | Tanda baca Cina tidak memiliki rentang pengkodean yang seragam. Anda dapat mencari Unicode tanda baca Cina di mesin pencari dan kemudian menggunakan operator untuk mengecualikannya satu per satu. |
Contoh
Misalnya, ekspresi reguler untuk titik (。) adalah [\\x{3002}].
SELECT * FROM VALUES ('Hello.'),('nihao!') t(d) WHERE d RLIKE '[\\x{3002}]';
-- Hasil berikut dikembalikan:
+------------+
| d |
+------------+
| Hello. |
+------------+Untuk mencocokkan tanda kutip tunggal, Anda dapat menggunakan unicode0027, dan ekspresi reguler yang sesuai adalah [\\x{0027}].