O RLIKE é um operador do MaxCompute SQL baseado na especificação PCRE (Perl Compatible Regular Expressions) para correspondência e substituição de padrões em instruções SQL. Este tópico descreve o uso e apresenta exemplos do operador RLIKE. Para obter a lista completa de metacaracteres e classes de caracteres compatíveis com expressões regulares no MaxCompute SQL, consulte Expressões regulares.
Metacaracteres
A tabela a seguir lista os metacaracteres mais utilizados. Para acessar a lista completa, consulte Expressões regulares.
Metacaractere | Descrição |
| Corresponde ao início de uma string. |
| Corresponde ao fim de uma string. |
| Corresponde a qualquer caractere único. |
| Corresponde ao caractere ou padrão anterior zero ou mais vezes. |
| Corresponde ao caractere ou padrão anterior uma ou mais vezes. |
|
|
|
|
| Caractere de escape. |
| Corresponde a qualquer dígito (0–9). |
| Corresponde a qualquer caractere que não seja dígito. |
Exemplos
Correspondência de padrões gerais
-
Correspondência no início e no fim de uma string
-- 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)$'; -
Correspondência a qualquer caractere
-- 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$';
Correspondência de caracteres de escape
O operador RLIKE utiliza a barra invertida (\) como caractere de escape. Portanto, qualquer barra invertida (\) presente em um padrão de expressão regular deve ter escape duplo.
-
Exemplo 1
Para corresponder à string
a+b, em que+é um caractere especial de regex, aplique escape. No mecanismo de regex, isso é expresso comoa\+b. Como uma camada adicional de escape é necessária, a expressão que corresponde à string éa\\+b.SELECT 'a+b' RLIKE 'a\\+b'; -- Results: +------+ | _c1 | +------+ | true | +------+ -
Exemplo 2
Para corresponder ao caractere de barra invertida
\, que é um caractere especial no mecanismo de regex e deve ser expresso como\\, uma camada adicional de escape exige que ele seja escrito como\\\\.No MaxCompute SQL,
a\\bé escrito na expressão, masa\baparece na saída, pois o MaxCompute aplica escape à expressão.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 | +-----+------+ -
Exemplo 3
Se a string contiver um caractere de tabulação (TAB), o sistema armazena
\tcomo um único caractere durante a leitura. Assim, no padrão de regex, ele é tratado como um caractere comum.SELECT 'a\tb', 'a\tb' RLIKE 'a\tb'; -- Results: +---------+------+ | _c0 | _c1 | +---------+------+ | a b | true | +---------+------+ -
Exemplo 4
Faça a correspondência de strings que contenham dígitos (
\d), não dígitos (\D) e referências anteriores (\n).-- 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';
Grupos de caracteres
Grupos de caracteres POSIX
Para obter a lista completa de classes de caracteres POSIX, consulte Expressões regulares.
|
Grupo de caracteres |
Descrição |
Equivalente |
|
|
Letras e dígitos |
|
|
|
Letras |
|
|
|
Dígitos |
|
|
|
Letras minúsculas |
|
|
|
Caracteres de espaço em branco |
|
|
|
Letras maiúsculas |
|
Exemplos
-- 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:]]+$';
Grupos de caracteres chineses
Para obter a lista completa de grupos de caracteres chineses, consulte Expressões regulares.
|
Grupo de caracteres |
Padrão |
|
Caracteres de dois bytes (por exemplo, caracteres chineses) |
|
|
Caracteres chineses |
|
|
Pontuação chinesa |
Os sinais de pontuação chineses não possuem um intervalo de codificação unificado. Utilize o ponto de código Unicode de cada caractere para fazer a correspondência individualmente. |
Exemplos
O ponto final chinês ('。') corresponde ao ponto de código Unicode \x{3002}:
SELECT * FROM VALUES ('你好。'),('nihao!') t(d) WHERE d RLIKE '[\\x{3002}]';
-- Returns:
-- +------------+
-- | d |
-- +------------+
-- | 你好。 |
-- +------------+
Para corresponder a uma aspa simples, utilize o padrão[\x{0027}](ponto de código Unicode0027).