A função REGEXP_EXTRACT_ALL extrai todas as substrings da string source que correspondem ao pattern e as retorna como um array.
Sintaxe
ARRAY<T> REGEXP_EXTRACT_ALL(STRING <source>, STRING <pattern>[, BIGINT <group_id>])
Parâmetros
source: Obrigatório. Um valor do tipo STRING que especifica a string a ser pesquisada.
pattern: Obrigatório. Uma constante STRING ou uma expressão regular que especifica o padrão a ser correspondido. Para mais informações sobre expressões regulares, consulte Regular expression specifications.
-
group_id: Opcional. Um valor BIGINT que deve ser maior ou igual a 0.
Se você não especificar group_id, o sistema utilizará o valor padrão 1 e retornará um array com todos os resultados correspondentes em que group_id é 1.
Ao especificar um group_id, a função retorna um array com todos os resultados que correspondem a esse group_id.
Quando group_id é 0, todo o pattern é tratado como um único grupo.
Valor de retorno
Retorna um valor do tipo ARRAY<STRING>. As seguintes regras se aplicam:
-
A função retorna um erro quando pattern é uma string vazia, ou quando pattern não contém grupos de captura e group_id não é especificado.
NotaExecute o comando
SET odps.sql.bigquery.compatible=true;para ativar o modo de compatibilidade com BigQuery. Nesse modo, se o pattern não contiver grupos de captura e group_id não for especificado, a função retorna um array de substrings que correspondem ao pattern inteiro. A função retorna um erro se group_id não for um valor BIGINT ou for menor que 0.
Se source, pattern ou group_id for NULL, a função retorna NULL.
Exemplos
-
Exemplo 1: Quando group_id não é especificado, a função retorna por padrão os resultados do primeiro group_id.
-- Returns ["100","300"]. SELECT REGEXP_EXTRACT_ALL('100-200, 300-400', '(\\d+)-(\\d+)'); -
Exemplo 2: Defina o valor de group_id como
2. A função retorna os resultados do segundo group_id.-- Returns ["200","400"]. SELECT REGEXP_EXTRACT_ALL('100-200, 300-400', '(\\d+)-(\\d+)',2); -
Exemplo 3: O pattern não contém grupos de captura. Os cenários a seguir descrevem o uso do comando:
-
Cenário 1: Se o pattern não contiver grupos de captura e group_id não for especificado, a função retorna um erro. No modo de compatibilidade com BigQuery, a função retorna um array de substrings que correspondem ao padrão inteiro.
-- FAILED: ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: SQL Runtime Unretryable Error: ODPS-0121065:Argument value out of range - Regex group count is 0, but the specified group index is 1 SELECT REGEXP_EXTRACT_ALL('100-200, 300-200', '\\d+-\\d+'); -- Enable BigQuery compatibility mode. SET odps.sql.bigquery.compatible=true; -- Returns ["100-200","300-200"]. SELECT REGEXP_EXTRACT_ALL('100-200, 300-200', '\\d+-\\d+'); -
Cenário 2: Se o pattern não contiver grupos de captura e group_id for definido como 0, a função retorna um array de substrings que correspondem ao padrão inteiro.
-- Returns ["100-200","300-200"]. SELECT REGEXP_EXTRACT_ALL('100-200, 300-200', '\\d+-\\d+',0);
-
Funções relacionadas
REGEXP_EXTRACT_ALL é uma função de string. Para mais informações sobre funções de string, consulte String Functions Overview.