Cadenassolo PostgreSQL

REGEXP_MATCHES

Extrae de una cadena las partes que encajan con una expresión regular.

Sintaxis

REGEXP_MATCHES(<texto>, '<patrón>')
REGEXP_MATCHES(<texto>, '<patrón>', '<opciones>')

Devuelve un array con lo encontrado: si el patrón tiene grupos entre paréntesis, un elemento por grupo. Sin la opción 'g' solo busca la primera coincidencia; con ella, todas, y cada coincidencia pasa a ser una fila aparte del resultado. Para obtener sin más la primera coincidencia como texto, es más sencillo REGEXP_SUBSTR.

La primera coincidencia como array
SELECT REGEXP_MATCHES('Order 1234, box 56', '[0-9]+') AS first_match;
first_match
["1234"]
Todos los números como filas separadas
SELECT REGEXP_MATCHES('Order 1234, box 56', '[0-9]+', 'g') AS match;
match
["1234"]
["56"]
Usuario y dominio como gruposAvanzado
SELECT (REGEXP_MATCHES('emma@example.com', '(.+)@(.+)'))[1] AS login,
(REGEXP_MATCHES('emma@example.com', '(.+)@(.+)'))[2] AS domain;
logindomain
emmaexample.com

Cada pareja de paréntesis del patrón es un grupo aparte, y [1] y [2] los sacan del array.

Ten en cuenta

El resultado es un array aunque se haya encontrado un solo valor: {1234}. Para obtener texto, toma el elemento [1] o usa REGEXP_SUBSTR.

Si no hay coincidencia, REGEXP_MATCHES no da NULL, sino ninguna fila, y la fila de la tabla desaparece del resultado. REGEXP_SUBSTR, en ese caso, devuelve NULL y no pierde la fila.