Pular para o conteúdo principal
Documentos
Sintaxe básicaFunções JSONAcionadoresGerenciamento de tabelas e esquemasFunções de cadeia de caracteresFunções matemáticasFunções de dataBancos de dadosÍndices

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 e REGEXP_SPLIT_TO_ARRAY para escolher a mais adequada às suas necessidades.