O MySQL tem uma série de funções e operadores que nos permitem realizar operações usando expressões regulares (regex). Este artigo apresenta dois operadores e uma função que nos permitem descobrir se uma string corresponde a uma expressão regular especificada por um determinado padrão.
Essas funções e operadores regex são:
REGEXP_LIKE()
REGEXP
RLIKE
Estes são basicamente equivalentes, pois os operadores (os dois segundos) são ambos sinônimos da função (o primeiro). De qualquer forma, você pode ver exemplos de todos os três em ação abaixo.
O REGEXP_LIKE()
Função
Primeiro, vamos ver a função. Aqui está um exemplo de execução de uma pesquisa regex usando o
REGEXP_LIKE()
função:SELECT REGEXP_LIKE('Car', '^C') AS 'Match', REGEXP_LIKE('Bar', '^C') AS 'No Match';
Resultado:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
A primeira string corresponde (porque começa com C ) então o resultado é
1
. A segunda string não corresponde e, portanto, o resultado é 0
. No entanto, esta função pode ser muito mais útil do que simplesmente retornar um
1
ou 0
. Por exemplo, pode ser adicionado ao WHERE
cláusula ao consultar um banco de dados. Nesse caso, podemos obter uma lista de linhas que contêm uma correspondência para o padrão. Aqui está um exemplo:
SELECT AlbumId, AlbumName FROM Albums WHERE REGEXP_LIKE(AlbumName, '^Power');
Resultado:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Segue a tabela completa:
SELECT AlbumId, AlbumName FROM Albums;
Resultado:
+---------+--------------------------+ | AlbumId | AlbumName | +---------+--------------------------+ | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | +---------+--------------------------+
O REGEXP
Operador
Veja como fazer a mesma coisa usando o
REGEXP
operador:SELECT 'Car' REGEXP '^C' AS 'Match', 'Bar' REGEXP '^C' AS 'No Match';
Resultado:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
E o exemplo de banco de dados:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName REGEXP '^Power';
Resultado:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Você também pode usar
NOT REGEXP
para retornar o resultado oposto. O RLIKE
Operador
E aqui está usando
RLIKE
:SELECT 'Car' RLIKE '^C' AS 'Match', 'Bar' RLIKE '^C' AS 'No Match';
Resultado:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
E o exemplo de banco de dados:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName RLIKE '^Power';
Resultado:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Neste caso eu simplesmente troquei
REGEXP
para RLIKE
e deixou o resto do código sozinho. Você também pode usar
NOT RLIKE
para retornar o resultado oposto. Mais funções REGEX
O MySQL também inclui algumas outras funções e operadores regex. Três deles estão listados abaixo. Tecnicamente, você também pode usar os dois primeiros para “detectar” se uma string corresponde a um padrão regex (nesse caso, talvez este artigo deva ser intitulado “5 maneiras de detectar se uma string corresponde a uma expressão regular no MySQL” em vez de apenas “ 3 maneiras…").
De qualquer forma, aqui estão mais três funções regex:
- Você pode usar o
REGEXP_INSTR()
função para retornar o índice inicial de uma substring que corresponde ao padrão de expressão regular. - O
REGEXP_SUBSTR()
A função retorna a substring que corresponde ao padrão de expressão regular fornecido. - E o
REGEXP_REPLACE()
A função substitui as ocorrências da substring dentro de uma string que corresponde ao padrão de expressão regular fornecido.