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_MATCHESretorna 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_TABLEeREGEXP_SPLIT_TO_ARRAYpara escolher a mais adequada às suas necessidades.