La función REGEXP_MATCHES en PostgreSQL permite buscar y devolver las coincidencias de un patrón específico de expresión regular dentro de una cadena. A pesar de que la función devuelve un conjunto de datos, por lo general solo se obtiene un único valor que corresponde a la primera coincidencia encontrada. Esta función es fundamental cuando se necesita realizar búsquedas avanzadas dentro de cadenas, usando patrones complejos que no pueden ser logrados mediante operaciones simples de comparación.
Englobada dentro de las funciones de cadena de PostgreSQL, REGEXP_MATCHES facilita la extracción de subcadenas que siguen un patrón determinado, lo que resulta útil para tareas de validación de datos, búsqueda de coincidencias específicas o extracción de información. Con esta herramienta, es posible aprovechar todo el poder de las expresiones regulares dentro de tus consultas SQL.
A continuación, te mostraré la sintaxis de la función REGEXP_MATCHES y ejemplos prácticos para ilustrar su uso.
Para más información, puedes consultar la documentación oficial de PostgreSQL.
Sintaxis
La sintaxis para utilizar la función REGEXP_MATCHES en PostgreSQL es la siguiente:
REGEXP_MATCHES(cadena, patron [, indicador])
- REGEXP_MATCHES: es el nombre de la función.
- cadena: cadena a buscar.
- patrón: expresión regular.
- indicador: parámetro para indicar opciones, en la mayoría de casos se utiliza el indicador g, ya que de lo contrario solo devolvería un resultado.
Ejemplo
Búsqueda sin opciones
En el siguiente ejemplo buscamos dentro de la cadena ‘XY1234Z’ y obtenemos los números:
SELECT REGEXP_MATCHES('XY1234Z', 'Y*([0-9]{1,3})');
Búsqueda con opción global
En el siguiente ejemplo buscamos dentro de la cadena ‘Hastag #PostgreSQL #Web’ y obtenemos las palabras que van después del símbolo # siempre que contenga caracteres alfanuméricos o un guion bajo. Observa como le indicamos la opción para que nos devuelva todas las que encuentre:
SELECT REGEXP_MATCHES('Hastag #PostgreSQL #Web', '#([A-Za-z0-9_]+)' , 'g');
Búsqueda con opción sensible a minúsculas
En el siguiente ejemplo buscamos dentro de la cadena ‘postgreSQL1, postgreSQL2, PostgreSQL3’. En el primer caso, le indicamos la opción n (la opción c también realiza la misma función) para que sea sensible a la letra P en mayúsculas y en el segundo caso le indicamos el parámetro i para que no distinga entre mayúsculas o minúsculas:
SELECT REGEXP_MATCHES('postgreSQL1, postgreSQL2, PostgreSQL3', '([P][A-Za-z0-9_]+)' , 'n'), REGEXP_MATCHES('postgreSQL1, postgreSQL2, PostgreSQL3', '([P][A-Za-z0-9_]+)' , 'i');