REGEXP_SUBSTR¶
Retorna a subcadeia de caracteres que corresponde a uma expressão regular dentro de uma cadeia de caracteres.
Sintaxe¶
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 retorna toda a parte correspondente do assunto. Entretanto, se o parâmetro
e(para “extrair”) for especificado, REGEXP_SUBSTR retornará a parte do sujeito que corresponde ao primeiro grupo do 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 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 VARCHAR que é a subcadeia de caracteres correspondente.
A função retorna NULL nos seguintes casos:
Nenhuma correspondência foi encontrada.
Qualquer argumento é 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¶
A documentação da função REGEXP_INSTR contém muitos exemplos que utilizam tanto REGEXP_SUBSTR como REGEXP_INSTR. Talvez você também queira dar uma olhada nesses exemplos.
Estes exemplos utilizam as cadeias de caracteres criadas abaixo:
As cordas têm as seguintes características:
A cadeia de caracteres com um
idde2tem várias ocorrências da palavra “the”.A cadeia de caracteres com um
idde3tem várias ocorrências da palavra “the” com espaços em branco extras entre as palavras.A cadeia de caracteres com um
idde4tem a sequência de caractere “the” dentro de várias palavras (“thespian” e “theater”), mas sem a palavra “the” sozinha.
Os exemplos a seguir chamam a função REGEXP_SUBSTR:
Chamada da função REGEXP_SUBSTR em uma lista SELECT¶
Chame a função REGEXP_SUBSTR em uma lista SELECT para extrair ou exibir valores que correspondem a um padrão.
Este exemplo procura a primeira ocorrência da palavra the, seguida por um ou mais caracteres que não sejam de palavras (por exemplo, o espaço em branco que separa as palavras) seguido por um ou mais caracteres de palavras.
“Caracteres de palavras” incluem não apenas as letras a–z e A–Z, mas também o sublinhado (“_”) e os dígitos decimais 0–9, mas não espaços em branco, pontuação e assim por diante.
Começando na posição 1 da cadeia de caracteres, procure a segunda ocorrência da palavra the, seguida por um ou mais caracteres não pertencentes à palavra, seguidos por um ou mais caracteres pertencentes à palavra.
Começando na posição 1 da cadeia de caracteres, procure a segunda ocorrência da palavra the, seguida por um ou mais caracteres não pertencentes à palavra, seguidos por um ou mais caracteres pertencentes à palavra.
Em vez de retornar a correspondência inteira, retorna apenas o “grupo” (por exemplo, a parte da substring que corresponde à parte da expressão regular entre parênteses). Neste caso, o valor retornado deve ser a palavra após “the”.
Este exemplo mostra como recuperar a segunda palavra da primeira, segunda e terceira correspondência de um padrão de duas palavras no qual a primeira palavra é A. Este exemplo também mostra que tentar ir além do último padrão faz com que o Snowflake retorne NULL.
Primeiro, crie uma tabela e insira os dados:
Executar a consulta:
Este exemplo mostra como recuperar o primeiro, segundo e terceiro grupos dentro da primeira ocorrência do padrão. Neste caso, os valores retornados são as letras individuais da palavra MAN.
Aqui estão alguns exemplos adicionais.
Criar uma tabela e inserir dados:
Retorne a primeira correspondência que contém um o minúsculo, correspondendo a um limite de palavra (\b), seguido por zero ou mais caracteres de palavras (\S), a letra o e, em seguida, zero ou mais caracteres de palavras até o próximo limite de palavra:
Retorna a primeira correspondência que contém uma letra o minúscula, começando no terceiro caractere no assunto:
Retorna a terceira correspondência que contém uma letra o minúscula, começando no terceiro caractere no assunto:
Retorna a terceira correspondência que contém uma letra o minúscula, começando no terceiro caractere no assunto, com correspondência que não diferencia maiúsculas de minúsculas:
Este exemplo mostra que você pode omitir explicitamente qualquer parâmetro de expressão regular especificando a cadeia de caracteres vazia.
O exemplo seguinte ilustra ocorrências que se sobrepõem: Primeiro, crie uma tabela e insira os dados:
Execute uma consulta que encontre a segunda ocorrência do seguinte padrão em cada linha: um sinal de pontuação seguido por dígitos e letras, seguido por um sinal de pontuação.
O exemplo a seguir cria um objeto JSON a partir de um log de acesso ao Apache HTTP Server usando uma combinação de padrões e concatenações. Primeiro, crie uma tabela e insira os dados:
Execute uma consulta:
Chamada da função REGEXP_SUBSTR em uma cláusula WHERE¶
Chame a função REGEXP_SUBSTR em uma cláusula WHERE para filtrar linhas que contêm valores que correspondem a um padrão. Ao usar a função, você pode evitar múltiplas condições OR.
O exemplo a seguir consulta a tabela demo2 criada anteriormente para retornar linhas que incluem a cadeia de caracteres best ou thespian. Adicione IS NOT NULL à condição para retornar linhas que correspondem ao padrão. Ou seja, as linhas em que a função REGEXP_SUBSTR não retornou NULL:
Você pode usar as condições AND para encontrar linhas que correspondem a vários padrões. Por exemplo, a consulta a seguir retorna linhas que incluem a cadeia de caracteres best ou thespian e começam com a cadeia de caracteres It: