MySQL Expresiones Regulares
En los capítulos anteriores hemos aprendido que MySQL puedeLIKE ...%realizar coincidencias difusas.
MySQL también admite la coincidencia de otras expresiones regulares; en MySQL se utilizaREGEXPyRLIKEel operador para realizar la coincidencia de expresiones regulares.
Si conoce PHP o Perl, entonces su uso es muy sencillo, porque la coincidencia de expresiones regulares de MySQL es similar a la de estos scripts.
Los patrones regulares de la siguiente tabla se pueden aplicar al operador REGEXP.
| Patrón | Descripción |
|---|---|
| ^ | Coincide con la posición inicial de la cadena de entrada. Si se establece la propiedad Multiline del objeto RegExp, ^ también coincide con la posición después de '\n' o '\r'. |
| $ | Coincide con la posición final de la cadena de entrada. Si se establece la propiedad Multiline del objeto RegExp, $ también coincide con la posición antes de '\n' o '\r'. |
| . | Coincide con cualquier carácter individual excepto "\n". Para coincidir con cualquier carácter, incluido '\n', use un patrón como '[.\n]'. |
| [...] | Conjunto de caracteres. Coincide con cualquier carácter incluido. Por ejemplo, '[abc]' puede coincidir con 'a' en "plain". |
| [^...] | Conjunto de caracteres negado. Coincide con cualquier carácter no incluido. Por ejemplo, '[^abc]' puede coincidir con 'p' en "plain". |
| p1|p2|p3 | Coincide con p1 o p2 o p3. Por ejemplo, 'z|food' puede coincidir con "z" o "food". '(z|f)ood' coincide con "zood" o "food". |
| * | Coincide con la subexpresión anterior cero o más veces. Por ejemplo, zo* puede coincidir con "z" y "zoo". * equivale a {0,}. |
| + | Coincide con la subexpresión anterior una o más veces. Por ejemplo, 'zo+' puede coincidir con "zo" y "zoo", pero no con "z". + equivale a {1,}. |
| {n} | n es un entero no negativo. Coincide exactamente n veces. Por ejemplo, 'o{2}' no coincide con 'o' en "Bob", pero sí con las dos o en "food". |
| {n,m} | m y n son enteros no negativos, donde n <= m. Coincide al menos n veces y como máximo m veces. |
Clases de caracteres en la coincidencia de expresiones regulares
.: Coincide con cualquier carácter individual.^: Coincide con el inicio de la cadena.$: Coincide con el final de la cadena.*: Coincide con cero o más elementos anteriores.+: Coincide con uno o más elementos anteriores.?: Coincide con cero o un elemento anterior.[abc]: Coincide con cualquier carácter del conjunto de caracteres.[^abc]: Coincide con cualquier carácter que no esté en el conjunto de caracteres.[a-z]: Coincide con cualquier letra minúscula dentro del rango.[0-9]: Coincide con un dígito.\w: Coincide con un carácter alfanumérico (incluido el guion bajo).\s: Coincide con un carácter de espacio en blanco.
Uso de REGEXP para la coincidencia de patrones
REGEXP es un operador utilizado para realizar la coincidencia de expresiones regulares.
REGEXP se utiliza para comprobar si una cadena coincide con el patrón de expresión regular especificado. A continuación se muestra la sintaxis básica del operador REGEXP:
SELECT column1, column2, ... FROM table_name WHERE column_name REGEXP 'pattern';
Descripción de parámetros:
column1,column2, ... son los nombres de las columnas que desea seleccionar. Si utiliza*indica seleccionar todas las columnas.table_namees el nombre de la tabla desde la que desea consultar los datos.column_namees el nombre de la columna donde desea realizar la coincidencia de expresiones regulares.'pattern'es un patrón de expresión regular.
Buscar en el campo name los datos que comiencen'st'con:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
Buscar en el campo name los datos que terminen'ok'con:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
Buscar en el campo name los datos que contengan'mar'la cadena:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
Buscar en el campo name los datos que comiencen con una vocal o que terminen'ok'con la cadena:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
Seleccione los registros de la tabla de pedidos donde la descripción contiene "item" seguido de uno o más dígitos.
SELECT * FROM orders WHERE order_description REGEXP 'item[0-9]+';
UsandoBINARYla palabra clave, la coincidencia distingue entre mayúsculas y minúsculas:
SELECT * FROM products WHERE product_name REGEXP BINARY 'apple';
Usando OR para múltiples condiciones de coincidencia, a continuación se seleccionarán los registros de empleados cuyo apellido sea "Smith" o "Johnson":
SELECT * FROM employees WHERE last_name REGEXP 'Smith|Johnson';
Uso de RLIKE para la coincidencia de patrones
RLIKE es un operador en MySQL utilizado para realizar la coincidencia de expresiones regulares, igual que REGEXP; RLIKE y REGEXP se pueden usar indistintamente, sin diferencia.
A continuación se muestra la sintaxis básica para realizar la coincidencia de expresiones regulares con RLIKE:
SELECT column1, column2, ... FROM table_name WHERE column_name RLIKE 'pattern';
Descripción de parámetros:
column1,column2, ... son los nombres de las columnas que desea seleccionar. Si utiliza*indica seleccionar todas las columnas.table_namees el nombre de la tabla desde la que desea consultar los datos.column_namees el nombre de la columna donde desea realizar la coincidencia de expresiones regulares.'pattern'es un patrón de expresión regular.
SELECT * FROM products WHERE product_name RLIKE '^[0-9]';
La instrucción SQL anterior selecciona todos los productos cuyo nombre comienza con un dígito.
Otras extensiones