Função REGEXP_SUBSTR - Amazon Redshift

Função REGEXP_SUBSTR

Retorna os caracteres de uma string ao procurar por um padrão de expressão regular. REGEXP_SUBSTR é semelhante a função Função SUBSTRING, mas permite que você pesquise uma string quanto a um padrão de expressão regular. Se a função não conseguir corresponder a expressão regular com nenhum caractere na string, ela retornará uma string vazia. Para ter mais informações sobre expressões regulares, consulte Operadores POSIX e Expressão regular na Wikipédia.

Sintaxe

REGEXP_SUBSTR( source_string, pattern [, position [, occurrence [, parameters ] ] ] )

Argumentos

source_string

Uma expressão de string a ser pesquisada.

pattern

Um literal de string UTF-8 que representa um padrão de expressão regular. Para ter mais informações, consulte Operadores POSIX.

position

Um inteiro positivo que indica a posição em source_string para começar a pesquisar. A posição é baseada no número de caracteres, e não bytes, de forma que caracteres multibyte são contados como caracteres simples. O padrão é um. Se a posição for menor que 1, a pesquisa começará no primeiro caractere da source_string. Se position for maior que o número de caracteres na source_string, o resultado será uma string vazia ("").

occurrence

Um inteiro positivo que indica qual ocorrência do padrão usar. REGEXP_SUBSTR ignora as primeiras correspondências de occurrence -1. O padrão é um. Se a ocorrência for menor que 1 ou maior que o número de caracteres em source_string, a pesquisa será ignorada e o resultado será NULL.

parameters

Uma ou mais literais de sequências que indicam como a função corresponde o padrão. Os valores possíveis são os seguintes:

  • c – Executa a correspondência diferenciando maiúsculas e minúsculas. O padrão é usar a correspondência diferenciando maiúsculas e minúsculas.

  • i – Executa a correspondência sem diferenciar maiúsculas de minúsculas.

  • e – Extrai uma subsequência usando uma subexpressão.

    Se o padrão incluir uma subexpressão, REGEXP_SUBSTR corresponderá uma subsequência usando a primeira subexpressão em padrão. Uma subexpressão é uma expressão dentro do padrão que está entre parênteses. Por exemplo, para o padrão 'This is a (\\w+)' faz correspondência com a primeira expressão com a string 'This is a ' seguida por uma palavra. Em vez de retornar o padrão, REGEXP_SUBSTR com o parâmetro e retorna somente a string dentro da subexpressão.

    REGEXP_SUBSTR considera apenas a primeira subexpressão. As subexpressões adicionais são ignoradas. Se o padrão não tiver uma subexpressão, REGEXP_SUBSTR ignorará o parâmetro 'e'.

  • p — Interpreta o padrão com o dialeto de expressão regular compatível com Perl (PCRE - Perl Compatible Regular Expression). Para ter mais informações sobre PCRE, consulte Perl Compatible Regular Expressions na Wikipédia.

Tipo de retorno

VARCHAR

Exemplos

O seguinte exemplo retorna a porção de um endereço de e-mail entre o caractere @ e a extensão de domínio. Os dados de users consultados são dos dados de amostra do Amazon Redshift. Para ter mais informações, consulte Banco de dados de exemplo.

SELECT email, regexp_substr(email,'@[^.]*') FROM users ORDER BY userid LIMIT 4; email | regexp_substr -----------------------------------------------+-------------------------- Suspendisse.tristique@nonnisiAenean.edu | @nonnisiAenean amet.faucibus.ut@condimentumegetvolutpat.ca | @condimentumegetvolutpat sed@lacusUtnec.ca | @lacusUtnec Cum@accumsan.com | @accumsan

O exemplo a seguir retorna a porção da entrada correspondente à primeira ocorrência da string FOX com a correspondência sem diferenciar letras maiúsculas de minúsculas.

SELECT regexp_substr('the fox', 'FOX', 1, 1, 'i'); regexp_substr --------------- fox

O exemplo a seguir retorna a porção da entrada correspondente à segunda ocorrência da string FOX usando a correspondência que não diferencia letras maiúsculas de minúsculas. O resultado é NULL (vazio) porque não há uma segunda ocorrência.

SELECT regexp_substr('the fox', 'FOX', 1, 2, 'i'); regexp_substr ---------------

O exemplo a seguir retorna a primeira parte da entrada que começa com letras minúsculas. Isso é funcionalmente idêntico à mesma instrução SELECT sem o parâmetro c.

SELECT regexp_substr('THE SECRET CODE IS THE LOWERCASE PART OF 1931abc0EZ.', '[a-z]+', 1, 1, 'c'); regexp_substr --------------- abc

O exemplo a seguir usa um padrão escrito no dialeto PCRE para localizar palavras contendo pelo menos um número e uma letra minúscula. Ele usa o operador ?=, que tem uma conotação específica look-ahead em PCRE. Este exemplo retorna a parte da entrada correspondente à segunda palavra.

SELECT regexp_substr('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 'p'); regexp_substr --------------- a1234

O exemplo a seguir usa um padrão escrito no dialeto PCRE para localizar palavras contendo pelo menos um número e uma letra minúscula. Ele usa o operador ?=, que tem uma conotação específica look-ahead em PCRE. Este exemplo retorna a parte da entrada correspondente à segunda palavra, mas difere do exemplo anterior na medida em que usa a correspondência sem diferenciar maiúsculas de minúsculas.

SELECT regexp_substr('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 'ip'); regexp_substr --------------- A1234

O exemplo a seguir usa uma subexpressão para encontrar a segunda string correspondente ao padrão 'this is a (\\w+)' usando a correspondência que não diferencia letras maiúsculas de minúsculas. Ele retorna a subexpressão dentro dos parênteses.

SELECT regexp_substr( 'This is a cat, this is a dog. This is a mouse.', 'this is a (\\w+)', 1, 2, 'ie'); regexp_substr --------------- dog