全部产品
Search
文档中心

MaxCompute:RLIKE

更新时间:Jun 19, 2025

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.

?

  • Cocok dengan karakter sebelumnya atau pola karakter nol kali atau satu kali.

  • Bertindak sebagai pengubah pencocokan. Ketika karakter ini mengikuti karakter pembatas lainnya (*, +, ?, {n}, {n,}, atau {n,m}), pola pencocokan menjadi non-greedy. Pola non-greedy mencocokkan sesedikit mungkin karakter dalam string yang dicari, sedangkan pola greedy default mencocokkan sebanyak mungkin karakter dalam string yang dicari.

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 sebagai a\+b. Karena diperlukan lapisan pelolosan tambahan, ekspresi yang dapat mencocokkan string ini adalah a\\+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 \\\\.

    null

    Dalam MaxCompute SQL, a\\b ditulis, tetapi a\b ditampilkan 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 \t sebagai 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]

null

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.     |
+------------+
null

Untuk mencocokkan tanda kutip tunggal, Anda dapat menggunakan unicode0027, dan ekspresi reguler yang sesuai adalah [\\x{0027}].