Expresiones regulares de MySQL (REGEXP) con sintaxis y ejemplos
ยฟQuรฉ son las expresiones regulares?
Las expresiones regulares ayudan a buscar datos que coinciden con criterios complejos. En el tutorial anterior, analizamos los comodines. Si ya ha trabajado con comodines, es posible que se pregunte por quรฉ aprender expresiones regulares cuando puede obtener resultados similares utilizando comodines. Porque, en comparaciรณn con los comodines, las expresiones regulares nos permiten buscar datos que coincidan con criterios aรบn mรกs complejos.
Sintaxis bรกsica
La sintaxis bรกsica para una expresiรณn regular es la siguiente
SELECT statements... WHERE fieldname REGEXP 'pattern';
AQUร -
- โSELECCIONAR declaracionesโฆโ es el estรกndar Instrucciรณn SELECT
- โDONDE nombre de campoโ es el nombre de la columna en la que se realizarรก la expresiรณn regular.
- โPatrรณn 'REGEXP'โ REGEXP es el operador de expresiรณn regular y "patrรณn" representa el patrรณn que REGEXP debe hacer coincidir. RLIKE son los sinรณnimo de REGEXP y logra los mismos resultados que REGEXP. Para evitar confundirlo con el operador LIKE, mejor usar REGEXP .
Veamos ahora un ejemplo prรกctico.
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
La consulta anterior busca todos los tรญtulos de pelรญculas que contienen la palabra cรณdigo. No importa si el โcรณdigoโ estรก al principio, en la mitad o al final del tรญtulo. Siempre que estรฉ contenido en el tรญtulo se tendrรก en cuenta.
Supongamos que queremos buscar pelรญculas que comiencen con a, b, c o d, seguidas de cualquier nรบmero de otros personajes, ยฟcรณmo harรญamos para lograrlo? Podemos usar una expresiรณn regular junto con los metacaracteres para lograr los resultados deseados.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Ejecutando el script anterior en MySQL banco de trabajo contra myflixdb nos da los siguientes resultados.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 4 | Code Name Black | Edgar Jimz | 2010 | NULL |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
Ahora echemos un vistazo mรกs de cerca a nuestra expresiรณn regular responsable del resultado anterior.
'^[abcd]' el sรญmbolo de intercalaciรณn (^) significa que la coincidencia de patrรณn debe aplicarse al principio y charlist [abcd] significa que en nuestro conjunto de resultados solo se devuelven tรญtulos de pelรญculas que comienzan con a, b, c o d.
Modifiquemos nuestro script anterior y usemos NOT charlist y veamos quรฉ resultados obtendremos despuรฉs de ejecutar nuestra consulta.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Ejecutando el script anterior en MySQL El banco de trabajo contra myflixdb nos da los siguientes resultados.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 3 | X-Men | 2008 | ||
| 9 | Honey mooners | John Schultz | 2005 | 8 |
| 16 | 67% Guilty | 2012 | ||
| 17 | The Great Dictator | Chalie Chaplie | 1920 | 7 |
| 18 | sample movie | Anonymous | 8 | |
| 19 | movie 3 | John Brown | 1920 | 8 |
Ahora echemos un vistazo mรกs de cerca a nuestra expresiรณn regular responsable de los resultados anteriores.
'^[^abcd]' el sรญmbolo de intercalaciรณn (^) significa que la coincidencia de patrรณn debe aplicarse al principio y la lista de caracteres [^abcd] significa que los tรญtulos de pelรญculas que comienzan con cualquiera de los caracteres adjuntos se excluyen del conjunto de resultados.
Metacaracteres de expresiรณn regular
Lo que vimos en el ejemplo anterior es la forma mรกs simple de expresiรณn regular. Veamos ahora coincidencias de patrones de expresiones regulares mรกs avanzadas. Supongamos que queremos buscar tรญtulos de pelรญculas que comiencen con el patrรณn "cรณdigo" usando solo una expresiรณn regular, ยฟcรณmo lo harรญamos? La respuesta son los metacaracteres. Nos permiten ajustar los resultados de nuestra bรบsqueda de patrones utilizando expresiones regulares.
| Char | Descripciรณn | Ejemplo | |
|---|---|---|---|
| * | La funciรณn asterisco (*) El metacarรกcter se utiliza para hacer coincidir cero (0) o mรกs instancias de las cadenas que lo preceden. | SELECCIONE * DE pelรญculas DONDE tรญtulo REGEXP 'da*'; darรก a todas las pelรญculas que contengan caracteres "da". Por ejemplo, El cรณdigo Da Vinci, Las niรฑas de papรก. | |
| + | La funciรณn mรกs (+) El metacarรกcter se utiliza para hacer coincidir una o mรกs instancias de cadenas que lo preceden. | SELECCIONE * DE `pelรญculas` DONDE `tรญtulo` REGEXP `mon+โ; darรก a todas las pelรญculas que contengan personajes "mon". Por ejemplo, รngeles y demonios. | |
| ? | La pregunta(?) El metacarรกcter se utiliza para hacer coincidir cero (0) o una instancia de las cadenas que lo preceden. | SELECCIONE * DE `categorรญas` DONDE `nombre_categorรญa` REGEXP `com?โ; proporcionarรก todas las categorรญas que contienen cadenas com. Por ejemplo, comedia, comedia romรกntica. | |
| . | La funciรณn punto (.) El metacarรกcter se utiliza para hacer coincidir cualquier carรกcter, a excepciรณn de una nueva lรญnea. | SELECCIONE * DE pelรญculas DONDE `aรฑo_de lanzamiento` REGEXP `200.โ; mostrarรก todas las pelรญculas estrenadas en los aรฑos que comienzan con los caracteres "200" seguidos de cualquier carรกcter individual. Por ejemplo, 2005,2007,2008, etc. | |
| [a B C] | La funciรณn lista charlista [abc] se utiliza para hacer coincidir cualquiera de los caracteres adjuntos. | SELECCIONE * DE `pelรญculas` DONDE `tรญtulo` REGEXP โ[vwxyz]โ; mostrarรก todas las pelรญculas que contengan un solo carรกcter en "vwxyz". Por ejemplo, X-Men, El cรณdigo Da Vinci, etc. | |
| [^ abc] | La funciรณn lista char [^abc] se utiliza para hacer coincidir cualquier carรกcter excepto los incluidos. | SELECCIONE * DE `pelรญculas` DONDE `tรญtulo` REGEXP โ^[^vwxyz]โ; mostrarรก todas las pelรญculas que contengan personajes distintos de los de "vwxyz". | |
| [ARIZONA] | La funciรณn [ARIZONA] se utiliza para hacer coincidir cualquier letra mayรบscula. | SELECCIONE * DE `miembros` DONDE `direcciรณn_postal` REGEXP โ[A-Z]โ; le darรก a todos los miembros que tengan una direcciรณn postal que contenga cualquier carรกcter de la A a la Z. Por ejemplo, Janet Jones con el nรบmero de membresรญa 1. | |
| [Arizona] | La funciรณn [Arizona] se utiliza para coincidir con cualquier letra minรบscula | SELECCIONE * DE `miembros` DONDE `direcciรณn_postal` REGEXP โ[a-z]โ; darรก a todos los miembros que tengan direcciones postales que contengan cualquier carรกcter de la a a la z. .Por ejemplo, Janet Jones con la membresรญa nรบmero 1. | |
| [0 9-] | La funciรณn [0 9-] se utiliza para hacer coincidir cualquier dรญgito del 0 al 9. | SELECCIONE * DE `miembros` DONDE `nรบmero_contacto` REGEXP โ[0-9]โ proporcionarรก a todos los miembros que hayan enviado nรบmeros de contacto que contengan caracteres "[0-9]". Por ejemplo, Robert Phil. | |
| ^ | La funciรณn cursor (^) se utiliza para iniciar el partido desde el principio. | SELECCIONE * DE `pelรญculas` DONDE `tรญtulo` REGEXP `^[cd]โ; muestra todas las pelรญculas cuyo tรญtulo comienza con cualquiera de los caracteres de "cd". Por ejemplo, Code Name Black, Daddy's Little Girls y Da Vinci Code. | |
| | | La funciรณn barra vertical (|) Se utiliza para aislar alternativas. | SELECCIONE * DE `pelรญculas` DONDE `tรญtulo` REGEXP โ^[cd]|^[u]โ; muestra todas las pelรญculas cuyo tรญtulo comienza con cualquiera de los caracteres en โcdโ o โuโ. Por ejemplo, Code Name Black, Daddy's Little Girl, Da Vinci Code y Underworld โ Awakening. | |
| [[:<:]] | La funciรณn [[:<:]] coincide con el comienzo de las palabras. | SELECCIONE * DE `pelรญculas` DONDE `tรญtulo` REGEXP โ[[:<:]]paraโ;
Ofrece todas las pelรญculas con tรญtulos que comienzan con los personajes. Por ejemplo: olvidar a Sarah Marshal. |
|
| [[:>:]] | La funciรณn [[:>:]] coincide con el final de las palabras. | SELECCIONE * DE `pelรญculas` DONDE `tรญtulo` REGEXP `ack[[:>:]]โ;
da todas las pelรญculas con tรญtulos que terminan con los personajes "ack" .Por ejemplo, Nombre en clave Negro. |
|
| [:clase:] | La funciรณn [:clase:] coincide con una clase de personaje, es decir
[:alfa:] para unir letras, [:espacio:] para que coincida con los espacios en blanco, [: puntuar:] coincide con puntuaciones y [:upper:] para letras de clase superior. |
SELECCIONE * DE `pelรญculas` DONDE `tรญtulo` REGEXP `[:alfa:]โ;
da todas las pelรญculas con tรญtulos que contienen solo letras .Por ejemplo, olvidar a Sarah Marshal, X-Men, etc. Esta consulta omitirรก pelรญculas como Piratas del Caribe 4. |
|
La barra invertida (\) se utiliza como carรกcter de escape. Si queremos utilizarla como parte del patrรณn en una expresiรณn regular, debemos utilizar barras invertidas dobles (\\)
Resumen
- Las expresiones regulares proporcionan una coincidencia de patrones potente y flexible que puede ayudarnos a implementar utilidades de bรบsqueda potentes para nuestros sistemas de bases de datos.
- REGEXP es el operador utilizado al realizar coincidencias de patrones de expresiones regulares. RLIKE es sinรณnimo
- Las expresiones regulares admiten una serie de metacaracteres que permiten una mayor flexibilidad y control al realizar coincidencias de patrones.
- La barra invertida se utiliza como carรกcter de escape en expresiones regulares. Solo se tiene en cuenta en la coincidencia de patrones si se han utilizado barras invertidas dobles.
- Las expresiones regulares no distinguen entre mayรบsculas y minรบsculas.
