No MySQL, o
REGEXP_SUBSTR()
A função retorna a substring que corresponde ao padrão de expressão regular fornecido. Se não houver correspondência (ou seja, a string de entrada não contém a substring), o resultado é
NULL
. Sintaxe
A sintaxe fica assim:
REGEXP_SUBSTR(expr, pat[, pos[, ocorrência[, match_type]]])
Onde
expr
é a string de entrada e pat
é o padrão de expressão regular para a substring. O opcional
pos
O argumento permite que você especifique uma posição dentro da string para iniciar a pesquisa. Se omitido, começa na posição 1. A
occurrence
opcional O argumento permite especificar qual ocorrência da correspondência procurar. Se omitido, a primeira ocorrência é usada (ocorrência 1). O opcional
match_type
O argumento permite refinar a expressão regular. Por exemplo, você pode usar esse argumento para especificar ou não a correspondência com distinção entre maiúsculas e minúsculas. Exemplo 1 – Uso básico
Segue um exemplo básico:
SELECT REGEXP_SUBSTR('Tailândia ou Camboja', 'l.nd') Resultado;
Resultado:
+--------+| Resultado |+--------+| terra |+--------+
Nesse caso, há uma correspondência e a substring é retornada.
Exemplo 2 – Várias correspondências
Por padrão, se houver várias correspondências na string, a primeira será retornada (embora você possa especificar outra ocorrência, se necessário. Chegaremos a isso em breve):
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd') Resultado;
Resultado:
+--------+| Resultado |+--------+| Emprestar |+--------+
Exemplo 3 – Sem correspondência
Aqui está um exemplo em que não há correspondência:
SELECT REGEXP_SUBSTR('Lend for land', '^C') Resultado;
Resultado:
+--------+| Resultado |+--------+| NULO |+--------+
Não há correspondência, então o resultado é
NULL
. Exemplo 4 – O pos
Argumento
Aqui está um exemplo de especificação de uma posição inicial:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2) Resultado;
Resultado:
+--------+| Resultado |+--------+| Cortar |+--------+
Começamos na posição 2, que vem após o início da primeira ocorrência, então a próxima ocorrência é retornada.
Aqui está outro exemplo:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1) 'Pos 1', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2) 'Pos 2', REGEXP_SUBSTR('Cat Berço de Corte', 'C.t', 6) 'Pos 6';
Resultado:
+-------+-------+-----------+| Posição 1 | Posição 2 | Pos 6 |+-------+-------+-----------+| Gato | Corte | Berço |+-------+-------+-----------+
Exemplo 5 – A occurrence
Argumento
Aqui está um exemplo de como usar a
occurrence
argumento. Em todos os casos, começamos na posição 1:SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 1) 'Ocorrência 1', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 2) 'Ocorrência 2', REGEXP_SUBSTR('Cat Cut Berço', 'C.t', 1, 3) 'Ocorrência 3';
Resultado:
+--------------+-----------+--------------+| Ocorrência 1 | Ocorrência 2 | Ocorrência 3 |+--------------+--------------+--------------+| Gato | Corte | Berço |+--------------+--------------+--------------+
No entanto, se começarmos em uma posição diferente, o resultado é diferente:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 1) 'Ocorrência 1', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 2) 'Ocorrência 2', REGEXP_SUBSTR('Cat Cut Berço', 'C.t', 2, 3) 'Ocorrência 3';
Resultado:
+--------------+-----------+--------------+| Ocorrência 1 | Ocorrência 2 | Ocorrência 3 |+--------------+--------------+--------------+| Corte | Berço | NULL |+--------------+--------------+--------------+
Isso aconteceu porque nossa posição inicial veio depois que a primeira ocorrência começou. Portanto, a ocorrência 2 tornou-se ocorrência 1 e a ocorrência 3 tornou-se ocorrência 2. E como não houve mais ocorrências, o resultado da ocorrência 3 foi NULL (ou seja, não houve ocorrência 3).
Exemplo 6 – O
match_type
Argumento
Você pode fornecer um argumento adicional para determinar o tipo de correspondência. Isso permite que você especifique coisas como se a correspondência diferencia maiúsculas de minúsculas, se deve ou não incluir terminadores de linha, etc.
Aqui está um exemplo de especificação de uma correspondência que diferencia maiúsculas de minúsculas e uma correspondência que não diferencia maiúsculas de minúsculas:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'c.t', 1, 1, 'c') 'Case-Sensitive', REGEXP_SUBSTR('Cat Cut Cot', 'c.t', 1, 1, 'i') 'Não diferencia maiúsculas de minúsculas';
Resultado:
+----------------+------------------+| Sensível a maiúsculas e minúsculas | Não diferencia maiúsculas de minúsculas |+----------------+------------------+| NULO | Gato |+----------------+------------------+
Omatch_type
argumento pode conter os seguintes caracteres:
c
- Correspondência com distinção entre maiúsculas e minúsculas.
i
- Correspondência sem distinção entre maiúsculas e minúsculas.
m
- Modo de várias linhas. Reconhecer terminadores de linha dentro da string. O comportamento padrão é combinar terminadores de linha apenas no início e no final da expressão de string.
n
- O
.
caractere corresponde aos terminadores de linha. O padrão é para.
correspondência para parar no final de uma linha. u
- Finalizações de linha somente para Unix. Apenas o caractere de nova linha é reconhecido como uma linha que termina com
.
,^
e$
operadores de correspondência.