Função regexp_extract

Aplica-se a:Marque Sim Databricks SQL Marque Sim Databricks Runtime

Extrai a primeira cadeia de caracteres str que corresponde à regexp expressão e corresponde ao índice do regex grupo.

Sintaxe

regexp_extract(str, regexp [, idx] )

Argumentos

  • str: Uma STRING expressão a ser correspondida.
  • regexp: Uma STRING expressão com um padrão correspondente.
  • idx: Uma expressão numérica integral opcional maior ou igual a 0 com o padrão 1.

Devoluções

Um STRING.

Se str, regexp, ou idx é NULL, o resultado é NULL. Se regexp não corresponder a nenhuma parte de str, o resultado é uma cadeia vazia. Se o padrão geral coincidir mas o grupo especificado por idx não participar no jogo, o resultado é uma sequência vazia.

A cadeia regexp deve ser uma expressão regular Java. Veja Java padrões regex para a sintaxe suportada.

Ao usar literais, use raw-literal (r prefixo) para evitar o pré-processamento de caracteres de escape.

regexp pode conter vários grupos. Os grupos de captura são definidos encerrando parte do padrão entre parênteses (...). idx indica qual grupo regex extrair. Um idx de 0 significa corresponder a toda a expressão regular. O valor padrão de idx é 1, o que significa que o primeiro grupo de captura é devolvido quando idx é omitido.

Se idx for maior do que o número de grupos de captura definidos em regexp, Databricks gera um erro.

Apenas o primeiro jogo de regexp em str é considerado. Para extrair todos os fósforos, use regexp_extract_all.

Condições de erro comuns

Exemplos

Extrair grupos de captura específicos

> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1);
 100

> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 2);
 200

Usa idx 0 para devolver a partida completa

> SELECT regexp_extract('Order: 100-200', '(\\d+)-(\\d+)', 0);
 100-200

O IDX padrão é 1

Quando idx é omitido, o primeiro grupo de captura é devolvido.

> SELECT regexp_extract('abc123def', '([a-z]+)(\\d+)');
 abc

Nenhuma correspondência devolve uma cadeia vazia

> SELECT regexp_extract('hello world', '(\\d+)', 1);

A entrada NULL devolve NULL

> SELECT regexp_extract(NULL, '(\\d+)', 1);
 NULL

Usa literais de cordas brutas para evitar fuga dupla

Numa string SQL normal, as barras inversas devem ser duplicadas (\\d para significar \d). Usa o r prefixo para literais brutos das cordas para escrever padrões de forma mais natural.

> SELECT regexp_extract('abc123', r'(\d+)', 1);
 123

Extrair um domínio de uma URL

> SELECT regexp_extract('https://www.databricks.com/product', r'https?://([^/]+)', 1);
 www.databricks.com

Extrair um componente de uma cadeia de datas

> SELECT regexp_extract('Event on 2024-03-15', r'(\d{4})-(\d{2})-(\d{2})', 0);
 2024-03-15

> SELECT regexp_extract('Event on 2024-03-15', r'(\d{4})-(\d{2})-(\d{2})', 2);
 03

Grupo de captura opcional que não participa na partida

Quando um grupo é opcional e não corresponde, uma cadeia vazia é devolvida para esse grupo.

> SELECT regexp_extract('ac', r'(a)(b)?(c)', 2);

Padrão regex inválido

> SELECT regexp_extract('abc', '[invalid', 0);
  Error: INVALID_PARAMETER_VALUE.PATTERN