Ir al contenido principal
Documentos
Funciones de cadenaDesencadenaBases de datosFunciones JSONFunciones matemáticasFunciones de fechaÍndicesSintaxis básicaGestión de Tablas y Esquemas

PostgreSQL REGEXP_MATCHES

La función REGEXP_MATCHES de PostgreSQL se utiliza para buscar un patrón dentro de una cadena utilizando expresiones regulares y devolver todas las apariciones de las coincidencias. Es especialmente útil para extraer subcadenas que coincidan con un patrón determinado.

Utilización

La función REGEXP_MATCHES se utiliza cuando necesitas encontrar y extraer de una cadena las subcadenas que coinciden con un patrón de expresión regular especificado. Devuelve un conjunto de arreglos de texto, donde cada arreglo contiene las subcadenas que coinciden con los grupos del patrón. Si el patrón coincide pero no tiene grupos de captura, devuelve un arreglo vacío.

SELECT REGEXP_MATCHES(source_string, pattern [, flags]);
  • source_string: La cadena a buscar.
  • pattern: La expresión regular que debe coincidir con la cadena de origen.
  • flags: Opcional. Modificadores como "i" para no distinguir entre mayúsculas y minúsculas. Si se omite, el comportamiento por defecto es la coincidencia entre mayúsculas y minúsculas.

Ejemplos

1. Coincidencia básica de patrones

SELECT REGEXP_MATCHES('abc123', '\d+');

Esta consulta busca uno o más dígitos en la cadena 'abc123' y devuelve {"123"} como coincidencia.

2. Coincidencia sensible a mayúsculas y minúsculas

SELECT REGEXP_MATCHES('PostgreSQL', 'postgresql', 'i');

Aquí, el patrón 'postgresql' se compara de forma insensible a mayúsculas y minúsculas con la cadena 'PostgreSQL', devolviendo {"PostgreSQL"}.

3. Extraer varios grupos

SELECT REGEXP_MATCHES('User: John, Age: 30', 'User: (\w+), Age: (\d+)');

En este ejemplo, la función extrae el nombre de usuario y la edad de la cadena, devolviendo {"John", "30"} como los grupos coincidentes.

4. Utilización con LATERAL en una consulta compleja

SELECT user_data.username, match
FROM users as user_data,
LATERAL REGEXP_MATCHES(user_data.details, 'User: (\w+), Age: (\d+)') AS match;

Este ejemplo demuestra el uso de REGEXP_MATCHES en una cláusula FROM con LATERAL, extrayendo y mostrando los detalles del usuario de una tabla.

Consejos y buenas prácticas

  • Comprende las limitaciones de la bandera. Ten en cuenta que la bandera "g" para la concordancia global no es compatible con REGEXP_MATCHES.
  • Captura partes específicas. Utiliza paréntesis en los patrones para capturar partes concretas de la cadena coincidente y obtener resultados detallados.
  • Consideraciones sobre el tipo de retorno. REGEXP_MATCHES devuelve un conjunto de arreglos de texto, que pueden requerir un manejo adicional en tu lógica de consulta.
  • Selección de funciones. Compara con funciones similares como REGEXP_REPLACE, REGEXP_SPLIT_TO_TABLE, y REGEXP_SPLIT_TO_ARRAY para elegir la adecuada a tus necesidades.