sql >> Base de Datos >  >> RDS >> Mysql

3 formas de detectar si una cadena coincide con una expresión regular en MySQL

MySQL tiene una serie de funciones y operadores que nos permiten realizar operaciones usando expresiones regulares (regex). Este artículo presenta dos operadores y una función que nos permiten averiguar si una cadena coincide con una expresión regular especificada por un patrón dado.

Estas funciones y operadores de expresiones regulares son:

  • REGEXP_LIKE()
  • REGEXP
  • RLIKE

Todos estos son básicamente equivalentes, ya que los operadores (los dos segundos) son ambos sinónimos de la función (el primero). En cualquier caso, puedes ver ejemplos de los tres en acción a continuación.

El REGEXP_LIKE() Función

Primero, veamos la función. Aquí hay un ejemplo de cómo ejecutar una búsqueda de expresiones regulares usando REGEXP_LIKE() función:

SELECT 
  REGEXP_LIKE('Car', '^C') AS 'Match',
  REGEXP_LIKE('Bar', '^C') AS 'No Match';

Resultado:

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

La primera cadena coincide (porque comienza con C ) por lo que el resultado es 1 . La segunda cadena no coincide, por lo que el resultado es 0 .

Sin embargo, esta función puede ser mucho más útil que simplemente devolver un 1 o 0 . Por ejemplo, se puede agregar a WHERE cláusula al consultar una base de datos. En este caso, podemos obtener una lista de filas que contengan una coincidencia para el patrón.

He aquí un ejemplo:

SELECT AlbumId, AlbumName
FROM Albums
WHERE REGEXP_LIKE(AlbumName, '^Power');

Resultado:

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

Aquí está la tabla 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  |
+---------+--------------------------+

El REGEXP Operador

Aquí se explica cómo hacer lo mismo usando REGEXP operador:

SELECT 
  'Car' REGEXP '^C' AS 'Match',
  'Bar' REGEXP '^C' AS 'No Match';

Resultado:

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

Y el ejemplo de la base de datos:

SELECT AlbumId, AlbumName
FROM Albums
WHERE AlbumName REGEXP '^Power';

Resultado:

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

También puede usar NOT REGEXP para devolver el resultado opuesto.

El RLIKE Operador

Y aquí está usando RLIKE :

SELECT 
  'Car' RLIKE '^C' AS 'Match',
  'Bar' RLIKE '^C' AS 'No Match';

Resultado:

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

Y el ejemplo de la base de datos:

SELECT AlbumId, AlbumName
FROM Albums
WHERE AlbumName RLIKE '^Power';

Resultado:

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

En este caso, simplemente cambié REGEXP para RLIKE y dejó el resto del código solo.

También puede usar NOT RLIKE para devolver el resultado opuesto.

Más funciones REGEX

MySQL también incluye algunas otras funciones y operadores de expresiones regulares. Tres de estos se enumeran a continuación. Técnicamente, también podría usar los dos primeros para "detectar" si una cadena coincide con un patrón de expresiones regulares (en cuyo caso, tal vez este artículo debería titularse "5 formas de detectar si una cadena coincide con una expresión regular en MySQL" en lugar de simplemente " 3 formas…”).

De todos modos, aquí hay tres funciones de expresiones regulares más:

  • Puede usar el REGEXP_INSTR() función para devolver el índice inicial de una subcadena que coincide con el patrón de expresión regular.
  • El REGEXP_SUBSTR() La función devuelve la subcadena que coincide con el patrón de expresión regular dado.
  • Y el REGEXP_REPLACE() La función reemplaza las ocurrencias de la subcadena dentro de una cadena que coincide con el patrón de expresión regular dado.