Compartilhar via


Função regexp_extract

Aplica-se a:marca de seleção positiva SQL do Databricks marca de seleção positiva Runtime do Databricks

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

Sintaxe

regexp_extract(str, regexp [, idx] )

Argumentos

  • str: uma expressão STRING a ser correspondida.
  • regexp: uma expressão STRING com um padrão correspondente.
  • idx: uma expressão de número integral opcional maior ou igual a 0 com o padrão 1.

Retornos

Um STRING.

Se str, regexpou idx for NULL, o resultado for NULL. Se regexp não corresponder a nenhuma parte, stro resultado será uma cadeia de caracteres vazia. Se o padrão geral corresponder, mas o grupo especificado por idx não participar da correspondência, o resultado será uma cadeia de caracteres vazia.

A cadeia de caracteres regexp deve ser uma expressão regular Java. Consulte Java padrões regex para obter a sintaxe com suporte.

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

regexp pode conter vários grupos. Os grupos de captura são definidos colocando parte do padrão entre parênteses (...). idx indica o grupo de regex para extração. Um idx igual a zero significa uma correspondência de toda a expressão regular. O valor idx padrão é 1, o que significa que o primeiro grupo de captura é retornado quando idx é omitido.

Se idx for maior que o número de grupos de captura definidos, regexpo Databricks gerará um erro.

Somente a primeira correspondência de regexp entrada str é considerada. Para extrair todas as correspondências, 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

Usar o idx 0 para retornar a correspondência inteira

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

O idx padrão é 1

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

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

Nenhuma correspondência retorna uma cadeia de caracteres vazia

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

A entrada NULL retorna NULL

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

Usar literais de cadeia de caracteres brutos para evitar escape duplo

Em uma cadeia de caracteres SQL regular, as barras invertidas devem ser dobradas (\\d para média \d). Use o r prefixo para literais de cadeia de caracteres brutos para gravar padrões com mais naturalidade.

> 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 caracteres de data

> 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 da correspondência

Quando um grupo é opcional e não corresponde, uma cadeia de caracteres vazia é retornada 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