RLIKE, MaxCompute SQL'de PCRE (Perl Compatible Regular Expressions) PCRE belirtimine dayanan ve SQL deyimlerinde desen eşleştirme ile değiştirme işlemlerinde kullanılan bir operatördür. Bu konu, RLIKE operatörünün kullanımını ve örneklerini açıklar. MaxCompute SQL'deki düzenli ifadelerin desteklediği özel karakterlerin ve karakter sınıflarının tam listesi için bkz. Düzenli ifadeler.
Özel karakterler
Aşağıdaki tabloda yaygın olarak kullanılan özel karakterler yer almaktadır. Tam liste için bkz. Düzenli ifadeler.
Özel Karakter | Açıklama |
| Bir dizenin başlangıcını eşleştirir. |
| Bir dizenin sonunu eşleştirir. |
| Herhangi bir tek karakteri eşleştirir. |
| Önceki karakteri veya deseni sıfır ya da daha fazla kez eşleştirir. |
| Önceki karakteri veya deseni bir ya da daha fazla kez eşleştirir. |
|
|
|
|
| Kaçış karakteridir. |
| Herhangi bir rakamı (0–9) eşleştirir. |
| Rakam olmayan herhangi bir karakteri eşleştirir. |
Örnekler
Genel desen eşleştirme
-
Bir dizenin başlangıcını ve sonunu eşleştirme
-- Check whether the string aa123bb starts with a. Returns true. SELECT 'aa123bb' RLIKE '^a'; -- Check whether the string aa123bb starts with a and ends with b. Returns true. SELECT 'aa123bb' RLIKE '^a.*b$'; -- Check whether the string footerbar contains foo followed by bar. Returns true. SELECT 'footerbar' RLIKE 'foo(.*?)(bar)'; -- Check whether the string footerbar starts with foo and ends with bar. Returns true. SELECT 'footerbar' RLIKE '^foo(.*?)(bar)$'; -
Herhangi bir karakteri eşleştirme
-- Check whether the string cc123bb starts with any character in the range a to d. Returns true. SELECT 'cc123bb' RLIKE '^[a-d]'; -- Check whether the string 12abc34 starts with 12, ends with 34, and contains at least one character in the range a to d in between. Returns true. SELECT '12abc34' RLIKE '^12[a-d]+34$';
Kaçış karakteri eşleştirme
RLIKE operatörü kaçış karakteri olarak ters eğik çizgi (\) kullanır. Bu nedenle, düzenli ifade deseninde geçen her ters eğik çizginin (\) iki kez kaçışlanması gerekir.
-
Örnek 1
a+bdizesini eşleştirmek için+özel bir regex karakteri olduğundan kaçış işlemi uygulanmalıdır. Regex motorunda bu duruma\+bşeklinde ifade edilir. Ek bir kaçış katmanı gerektiğinden dizeyi eşleştiren ifadea\\+bolur.SELECT 'a+b' RLIKE 'a\\+b'; -- Results: +------+ | _c1 | +------+ | true | +------+ -
Örnek 2
Regex motorunda özel bir karakter olan ve
\\şeklinde ifade edilmesi gereken ters eğik çizgi karakterini\eşleştirmek için ek bir kaçış katmanı gerekir; bu durumda ifade\\\\olarak yazılmalıdır.MaxCompute SQL'de ifadede
a\\byazılır ancak MaxCompute ifadeye kaçış uyguladığı için çıktıdaa\bgörüntülenir.SELECT 'a\\b', 'a\\b' RLIKE 'a\\\b'; -- Results: +-----+------+ | _c0 | _c1 | +-----+------+ | a\b | false | +-----+------+ SELECT 'a\\b', 'a\\b' RLIKE 'a\\\\b'; -- Results: +-----+------+ | _c0 | _c1 | +-----+------+ | a\b | true | +-----+------+ -
Örnek 3
Dize bir sekme karakteri (TAB) içeriyorsa sistem okuma sırasında
\tdeğerini tek bir karakter olarak saklar. Bu nedenle regex deseninde normal bir karakter olarak değerlendirilir.SELECT 'a\tb', 'a\tb' RLIKE 'a\tb'; -- Results: +---------+------+ | _c0 | _c1 | +---------+------+ | a b | true | +---------+------+ -
Örnek 4
Rakam (
\d), rakam dışı (\D) ve geri referansları (\n) içeren dizeleri eşleştirin.-- Check whether the string 2025maxcompute starts with a digit character. Returns true. SELECT '2025maxcompute' RLIKE '^\\\d'; -- Check whether the string maxcompute2025test starts with a non-digit character. Returns true. SELECT 'maxcompute2025test' RLIKE '^\\\D'; -- Check whether the string alibaba-cloud-MC2025-test contains MC followed by digits. Returns true. SELECT 'alibaba-cloud-MC2025-test' RLIKE 'MC\\\d'; -- Check whether the string alibaba-cloud-MC2025-test contains MC followed by exactly 4 digits. Returns true. SELECT 'alibaba-cloud-MC2025-test' RLIKE 'MC\\\d{4}-'; -- Check whether the string contains abcdefdef. Returns true. -- abc is capture group 1, def is capture group 2, and \2 represents a backreference to the second capture group, which must be escaped again as \\\2. This matches abcdefdef. SELECT 'mmabcdefdefgg' RLIKE '(abc)(def)\\\2';
Karakter grupları
POSIX karakter grupları
POSIX karakter sınıflarının tam listesi için bkz. Düzenli ifadeler.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnekler
-- Check whether the string hello123 contains only letters and digits. Returns true.
SELECT 'hello123' RLIKE '^[[:alnum:]]+$';
-- Check whether the string hello_123 contains only letters and digits. Returns false.
SELECT 'hello_123' RLIKE '^[[:alnum:]]+$';
Çince karakter grupları
Çince karakter gruplarının tam listesi için bkz. Düzenli ifadeler.
|
|
|
|
|
|
|
|
|
|
|
|
Örnekler
Çince nokta ('。') Unicode kod noktası \x{3002} ile eşleşir:
SELECT * FROM VALUES ('你好。'),('nihao!') t(d) WHERE d RLIKE '[\\x{3002}]';
-- Returns:
-- +------------+
-- | d |
-- +------------+
-- | 你好。 |
-- +------------+
Tek tırnak işaretini eşleştirmek için[\x{0027}]desenini (Unicode kod noktası0027) kullanın.