Categorias:

Funções de cadeia de caracteres (expressões regulares)

REGEXP_SUBSTR_ALL

Retorna um ARRAY que contém todas as subcadeias de caracteres que correspondem a uma expressão regular dentro de uma cadeia de caracteres. Se não for encontrada nenhuma correspondência, a função retorna um ARRAY vazio.

Aliases:

REGEXP_EXTRACT_ALL

Consulte também: Funções de cadeia de caracteres (expressões regulares)

Sintaxe

REGEXP_SUBSTR_ALL( <subject> , <pattern> [ , <position> [ , <occurrence> [ , <regex_parameters> [ , <group_num> ] ] ] ] )
Copy

Argumentos

Obrigatório:

subject

A cadeia de caracteres a ser procurada por correspondências.

pattern

Padrão a atender.

Para diretrizes sobre como especificar padrões, consulte Funções de cadeia de caracteres (expressões regulares).

Opcional:

position

Número de caracteres desde o início da cadeia de caracteres onde a função começa a procurar correspondências.

Padrão: 1 (a busca por uma correspondência começa no primeiro caractere à esquerda)

occurrence

Especifica a primeira ocorrência do padrão a partir do qual se começa a retornar as correspondências. A função salta as primeiras occurrence - 1 correspondências.

Por exemplo, se houver 5 correspondências e você especificar 3 para o argumento occurrence, a função ignorará as duas primeiras correspondências e retornará a terceira, quarta e quinta correspondências.

Padrão: 1

regex_parameters

Cadeia de caracteres de um ou mais caracteres que especifica os parâmetros de expressão regular usados para pesquisar correspondências. Os valores aceitos são:

  • c: diferencia maiúsculas e minúsculas.

  • i: não diferencia maiúsculas e minúsculas.

  • m: modo multilinhas.

  • e: extrair subcorrespondências.

  • s: o curinga ‘.’ também corresponde à nova linha.

Para obter mais detalhes, consulte a documentação de parâmetros de expressão regular.

Padrão: c

Nota

Por padrão, REGEXP_SUBSTR_ALL retorna toda a parte correspondente do assunto. Entretanto, se o parâmetro e (para “extrair”) for especificado, REGEXP_SUBSTR_ALL retornará a parte do sujeito que corresponde ao primeiro grupo do padrão. Se e for especificado, mas um group_num também não for especificado, então o group_num padrão é 1 (o primeiro grupo). Se não houver subexpressão no padrão, REGEXP_SUBSTR_ALL se comportará como se e não estivesse definido. Para exemplos que usam e, consulte Exemplos neste tópico.

group_num

O parâmetro group_num especifica o grupo a ser extraído. Os grupos são especificados usando parênteses na expressão regular.

Se um group_num for especificado, o Snowflake permite a extração mesmo que a opção 'e' também não tenha sido especificada. O 'e' está implícito.

O Snowflake oferece suporte a até 1.024 grupos.

Para exemplos que usam group_num, consulte Exemplos neste tópico.

Retornos

A função retorna um valor do tipo ARRAY. O ARRAY contém um elemento para cada subcadeia de caracteres correspondente.

Se você especificar group_num e o padrão não especificar um agrupamento com aquele número, a função retorna NULL. Por exemplo, se o padrão especifica apenas um grupo (por exemplo, a(b)c) e você usa 2 como group_num, a função retorna NULL.

Notas de uso

Para informações adicionais sobre o uso de expressões regulares, consulte Funções de cadeia de caracteres (expressões regulares).

Detalhes do agrupamento

Arguments with collation specifications are currently not supported.

Exemplos

O padrão no exemplo a seguir corresponde a um “a” minúsculo seguido por um dígito. O exemplo retorna um ARRAY que contém todas as correspondências:

select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]') as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a1", |
|   "a2", |
|   "a3", |
|   "a4", |
|   "a6"  |
| ]       |
+---------+
Copy

O exemplo seguinte começa a encontrar correspondências a partir do segundo caractere da cadeia de caracteres (2):

select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 2) as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a2", |
|   "a3", |
|   "a4", |
|   "a6"  |
| ]       |
+---------+
Copy

O exemplo a seguir começa a retornar correspondências a partir da terceira ocorrência do padrão na cadeia de caracteres (3):

select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 3) as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a3", |
|   "a4", |
|   "a6"  |
| ]       |
+---------+
Copy

O exemplo a seguir realiza uma correspondência que não diferencia maiúsculas e minúsculas (i):

select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 1, 'i') as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a1", |
|   "a2", |
|   "a3", |
|   "a4", |
|   "A5", |
|   "a6"  |
| ]       |
+---------+
Copy

O exemplo a seguir realiza uma correspondência que não diferencia maiúsculas e minúsculas e retorna a parte da cadeia de caracteres que corresponde ao primeiro grupo (ie):

select regexp_substr_all('a1_a2a3_a4A5a6', '(a)([[:digit:]])', 1, 1, 'ie') as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a",  |
|   "a",  |
|   "a",  |
|   "a",  |
|   "A",  |
|   "a"   |
| ]       |
+---------+
Copy

O exemplo a seguir demonstra que a função retorna um ARRAY vazio quando não são encontradas correspondências:

select regexp_substr_all('a1_a2a3_a4A5a6', 'b') as matches;
+---------+
| MATCHES |
|---------|
| []      |
+---------+
Copy