PostgreSQL REGEXP_MATCHES
A função REGEXP_MATCHES
no PostgreSQL é usada para procurar um padrão em uma string usando expressões regulares e retornar todas as ocorrências de correspondências. É particularmente útil para extrair substrings que correspondem a um determinado padrão.
Uso
A função REGEXP_MATCHES
é usada quando você precisa localizar e extrair substrings que correspondam a um padrão de expressão regular especificado de uma string. Ele retorna um conjunto de matrizes de texto, em que cada matriz contém as subcadeias que correspondem aos grupos no padrão. Se o padrão corresponder, mas não tiver grupos de captura, ele retornará uma matriz vazia.
SELECT REGEXP_MATCHES(source_string, pattern [, flags]);
source_string
: A cadeia de caracteres a ser pesquisada.pattern
: A expressão regular a ser comparada com a cadeia de caracteres de origem.flags
: Opcional. Modificadores como "i" para insensibilidade a maiúsculas e minúsculas. Se omitido, o comportamento padrão é a correspondência com distinção entre maiúsculas e minúsculas.
Exemplos
1. Correspondência básica de padrões
SELECT REGEXP_MATCHES('abc123', '\d+');
Essa consulta procura um ou mais dígitos na string 'abc123'
e retorna {"123"}
como a correspondência.
2. Correspondência com distinção entre maiúsculas e minúsculas
SELECT REGEXP_MATCHES('PostgreSQL', 'postgresql', 'i');
Aqui, o padrão 'postgresql'
é comparado de forma insensível a casos com a string 'PostgreSQL'
, retornando {"PostgreSQL"}
.
3. Extração de vários grupos
SELECT REGEXP_MATCHES('User: John, Age: 30', 'User: (\w+), Age: (\d+)');
Neste exemplo, a função extrai o nome de usuário e a idade da string, retornando {"John", "30"}
como os grupos correspondentes.
4. Usando com LATERAL em uma consulta complexa
SELECT user_data.username, match
FROM users as user_data,
LATERAL REGEXP_MATCHES(user_data.details, 'User: (\w+), Age: (\d+)') AS match;
Este exemplo demonstra o uso de REGEXP_MATCHES
em uma cláusula FROM
com LATERAL
, extraindo e exibindo detalhes do usuário de uma tabela.
Dicas e práticas recomendadas
- Entenda as limitações da bandeira. Observe que o sinalizador 'g' para correspondência global não é compatível com o site
REGEXP_MATCHES
. - Capturar partes específicas. Use parênteses em padrões para capturar partes específicas da cadeia de caracteres correspondente para obter resultados detalhados.
- Considerações sobre o tipo de retorno.
REGEXP_MATCHES
retorna um conjunto de matrizes de texto, o que pode exigir um tratamento adicional em sua lógica de consulta. - Seleção de função. Compare com funções semelhantes como
REGEXP_REPLACE
,REGEXP_SPLIT_TO_TABLE
eREGEXP_SPLIT_TO_ARRAY
para escolher a mais adequada às suas necessidades.