Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

3 maneiras de detectar se uma string corresponde a uma expressão regular no MySQL


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.