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.
- Aliases:
REGEXP_EXTRACT_ALL
Sintaxe¶
REGEXP_SUBSTR_ALL( <subject> ,
<pattern>
[ , <position>
[ , <occurrence>
[ , <regex_parameters>
[ , <group_num> ]
]
]
]
)
Argumentos¶
Obrigatório:
subjectA cadeia de caracteres a ser procurada por correspondências.
patternPadrão a atender.
Para diretrizes sobre como especificar padrões, consulte Funções de cadeia de caracteres (expressões regulares).
Opcional:
positionNúmero de caracteres a partir do início da cadeia de caracteres onde a função inicia a busca por correspondências. O valor deve ser um número inteiro positivo.
Padrão:
1(a busca por uma correspondência começa no primeiro caractere à esquerda)occurrenceEspecifica 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 - 1correspondências. Por exemplo, se houver 5 correspondências e você especificar3para o argumentooccurrence, a função ignorará as duas primeiras correspondências e retornará a terceira, quarta e quinta correspondências.Padrão:
1regex_parametersCadeia de caracteres de um ou mais caracteres que especifica os parâmetros usados para a busca de correspondências. Valores com suporte:
Parâmetro
Descrição
cCorrespondência com distinção entre maiúsculas e minúsculas
iCorrespondência sem distinção entre maiúsculas e minúsculas
mModo multilinha
eExtração de subcorrespondências
sO caractere curinga POSIX do modo de linha única
.corresponde a\nPadrão:
cPara obter mais informações, consulte Especificação dos parâmetros para a expressão regular.
Nota
Por padrão, REGEXP_SUBSTR_ALL retorna toda a parte correspondente do assunto. Entretanto, se o parâmetro
efor especificado, REGEXP_SUBSTR_ALL retorna a parte do assunto que corresponde ao primeiro grupo no padrão. Seefor especificado, mas umgroup_numtambém não for especificado, então ogroup_numpadrão é 1 (o primeiro grupo). Se não houver subexpressão no padrão, REGEXP_SUBSTR_ALL se comportará como seenão estivesse definido. Para exemplos que usame, consulte Exemplos neste tópico.group_numEspecifica qual grupo extrair. Os grupos são especificados usando parênteses na expressão regular.
Se um
group_numfor 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. A matriz contém um elemento para cada substring correspondente.
A função retorna uma matriz vazia se nenhuma correspondência for encontrada.
A função retorna NULL nos seguintes casos:
Qualquer argumento é NULL.
Você especifica
group_nume o padrão não especifica um agrupamento com esse número. Por exemplo, se o padrão especificar apenas um grupo (por exemplo,a(b)c) e você usar2comogroup_num, a função retornará 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 currently aren’t 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" |
| ] |
+---------+
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" |
| ] |
+---------+
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" |
| ] |
+---------+
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" |
| ] |
+---------+
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" |
| ] |
+---------+
O exemplo a seguir demonstra que a função retorna uma matriz vazia quando nenhuma correspondência é encontrada:
SELECT REGEXP_SUBSTR_ALL('a1_a2a3_a4A5a6', 'b') AS matches;
+---------+
| MATCHES |
|---------|
| [] |
+---------+
Este exemplo mostra como recuperar cada segunda palavra em uma cadeia de caracteres da primeira, segunda e terceira correspondências de um padrão de duas palavras em que a primeira palavra é A.
Primeiro, crie uma tabela e insira os dados:
CREATE OR REPLACE TABLE test_regexp_substr_all (string1 VARCHAR);;
INSERT INTO test_regexp_substr_all (string1) VALUES ('A MAN A PLAN A CANAL');
Executar a consulta:
SELECT REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w+)', 1, 1, 'e', 1) AS result1,
REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w+)', 1, 2, 'e', 1) AS result2,
REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w+)', 1, 3, 'e', 1) AS result3
FROM test_regexp_substr_all;
+-----------+-----------+-----------+
| RESULT1 | RESULT2 | RESULT3 |
|-----------+-----------+-----------|
| [ | [ | [ |
| "MAN", | "PLAN", | "CANAL" |
| "PLAN", | "CANAL" | ] |
| "CANAL" | ] | |
| ] | | |
+-----------+-----------+-----------+
Este exemplo mostra como recuperar o primeiro, segundo e terceiro grupos dentro de cada ocorrência do padrão em uma cadeia de caracteres. Nesse caso, os valores retornados são cada letra individual de cada palavra correspondente em cada grupo.
SELECT REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w)(\\w)(\\w)', 1, 1, 'e', 1) AS result1,
REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w)(\\w)(\\w)', 1, 1, 'e', 2) AS result2,
REGEXP_SUBSTR_ALL(string1, 'A\\W+(\\w)(\\w)(\\w)', 1, 1, 'e', 3) AS result3
FROM test_regexp_substr_all;
+---------+---------+---------+
| RESULT1 | RESULT2 | RESULT3 |
|---------+---------+---------|
| [ | [ | [ |
| "M", | "A", | "N", |
| "P", | "L", | "A", |
| "C" | "A" | "N" |
| ] | ] | ] |
+---------+---------+---------+