O AnalyticDB for MySQL oferece suporte às seguintes funções de expressão regular para correspondência de padrões, extração e substituição em consultas SQL.
REGEXP_INSTR — retorna a posição de uma correspondência
REGEXP_MATCHES — retorna um array com todas as substrings correspondentes
REGEXP_REPLACE — substitui as substrings correspondentes
REGEXP_SUBSTR — retorna uma substring correspondente
Pré-requisitos
Antes de começar, verifique se:
A versão secundária do mecanismo do cluster AnalyticDB for MySQL é 3.1.5.10 ou posterior
Para verificar a versão secundária do mecanismo, consulte Como visualizo a versão de um cluster do AnalyticDB for MySQL?
REGEXP_INSTR
regexp_instr(source, pattern[, position[, occurrence[, option]]])
Retorna um número inteiro que indica a posição inicial ou final da primeira (ou enésima) substring em source correspondente ao pattern. Retorna 0 se não houver correspondência.
Parâmetros
Obrigatórios:
|
Parâmetro |
Tipo |
Descrição |
|
|
VARCHAR |
String a ser pesquisada. |
|
|
— |
Expressão regular para correspondência. |
Opcionais:
|
Parâmetro |
Tipo |
Padrão |
Descrição |
|
|
BIGINT |
|
Posição do caractere em |
|
|
BIGINT |
|
Ocorrência da correspondência a retornar. |
|
|
BIGINT |
|
Define se o retorno é a posição inicial da correspondência ( |
Valor de retorno
Retorna BIGINT. Se não houver correspondência, retorna 0.
Exemplos
Retornar a posição inicial da primeira correspondência
SELECT REGEXP_INSTR('dog cat dog', 'dog') as res;
+-----+
| res |
+-----+
| 1 |
+-----+
Retornar a posição inicial da segunda correspondência
SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 2) as res;
+-----+
| res |
+-----+
| 9 |
+-----+
Retornar a posição após o fim da primeira correspondência
SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 1, 1) as res;
+-----+
| res |
+-----+
| 4 |
+-----+
REGEXP_MATCHES
regexp_matches(source, pattern[, flag])
Retorna um ARRAY(ARRAY(VARCHAR)) com todas as substrings em source correspondentes ao pattern. Se não houver correspondência, retorna um array vazio.
Sem a flag
g: retorna apenas a primeira correspondência.Com a flag
g: retorna todas as correspondências.Se o
patterncontiver grupos de captura, as substrings correspondentes de cada grupo serão retornadas como arrays aninhados. Caso contrário, retorna a correspondência completa.
Para obter uma única string correspondente em vez de um array, use REGEXP_SUBSTR.
Parâmetros
Obrigatórios:
|
Parâmetro |
Tipo |
Descrição |
|
|
VARCHAR |
String a ser pesquisada. |
|
|
— |
Expressão regular para correspondência. |
Opcionais:
|
Parâmetro |
Tipo |
Descrição |
|
|
VARCHAR |
Um ou mais caracteres que controlam o comportamento da correspondência. Use |
Valor de retorno
Retorna ARRAY(ARRAY(VARCHAR)). Se não houver correspondência, retorna um array vazio.
Exemplos
Correspondência com grupos de captura (apenas a primeira)
SELECT regexp_matches('foobarbequebaz', '(bar)(beque)');
+---------------------+
| regexp_matches |
+---------------------+
| [["bar","beque"]] |
Correspondência sem grupos de captura
SELECT regexp_matches('foobarbequebaz', 'barbeque');
+---------------------+
| regexp_matches |
+---------------------+
| [["barbeque"]] |
Corresponder a todas as ocorrências usando a flag g
SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g');
+------------------------------------------+
| regexp_matches |
+------------------------------------------+
| [["bar","beque"], ["bazil","barf"]] |
REGEXP_REPLACE
regexp_replace(source, pattern, replacement[, position[, occurrence]])
Substitui as substrings em source correspondentes ao pattern por replacement. Por padrão, substitui todas as correspondências a partir do primeiro caractere. Se não houver correspondência, retorna a string original.
Parâmetros
Obrigatórios:
|
Parâmetro |
Tipo |
Descrição |
|
|
VARCHAR |
String a ser pesquisada. |
|
|
— |
Expressão regular para correspondência. |
|
|
VARCHAR |
String de substituição para cada correspondência. |
Opcionais:
|
Parâmetro |
Tipo |
Padrão |
Descrição |
|
|
BIGINT |
|
Posição do caractere em |
|
|
BIGINT |
|
Ocorrência a substituir. O valor |
Valor de retorno
Retorna VARCHAR. Se não houver correspondência, retorna a string original.
Exemplos
Substituir todas as correspondências
SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X') as res;
+-------+
| res |
+-------+
| X X X |
+-------+
Substituir apenas a terceira correspondência
SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3) as res;
+-----------+
| res |
+-----------+
| abc def X |
+-----------+
REGEXP_SUBSTR
regexp_substr(source, pattern[, position[, occurrence]])
Retorna a substring em source correspondente ao pattern. Retorna NULL se não houver correspondência.
Parâmetros
Obrigatórios:
|
Parâmetro |
Tipo |
Descrição |
|
|
VARCHAR |
String a ser pesquisada. |
|
|
— |
Expressão regular para correspondência. |
Opcionais:
|
Parâmetro |
Tipo |
Padrão |
Descrição |
|
|
BIGINT |
|
Posição do caractere em |
|
|
BIGINT |
|
Ocorrência da correspondência a retornar. |
Valor de retorno
Retorna VARCHAR. Se não houver correspondência, retorna NULL.
Exemplos
Retornar a terceira correspondência
SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3) as res;
+------+
| res |
+------+
| ghi |
+------+
Retornar a primeira correspondência (comportamento padrão)
SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+') as res;
+------+
| res |
+------+
| abc |
+------+