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.