REGEXP¶
Retorna True se a entidade corresponder ao padrão especificado. Ambas as entradas devem ser expressões de texto.
REGEXP é semelhante à função LIKE, mas com expressões regulares POSIX estendidas em vez da sintaxe padrão SQL LIKE. Oferece suporte às condições de correspondência mais complexas do que LIKE.
- Aliases
RLIKE (2ª sintaxe)
Consulte também: Funções de cadeia de caracteres (expressões regulares)
Sintaxe¶
<subject> REGEXP <pattern>
Retornos¶
O tipo de dados do valor retornado é BOOLEAN.
Notas de uso¶
A função ancora implicitamente um padrão em ambas as extremidades (isto é,
''
torna-se automaticamente'^$'
, e'ABC'
torna-se automaticamente'^ABC$'
). Para combinar qualquer cadeia de caracteres começando com ABC, o padrão seria'ABC.*'
.O caractere de barra invertida (
\
) é o caractere de escape. Para obter mais informações, consulte Especificação de expressões regulares em constantes de cadeias de caracteres entre aspas simples.Para obter mais notas de uso, consulte o Notas de uso geral para funções de expressão regular.
Detalhes do agrupamento¶
Arguments with collation specifications are currently not supported.
Exemplos¶
O exemplo abaixo mostra como usar REGEXP com uma simples expressão de curinga:
Criar a tabela e carregar os dados:
CREATE OR REPLACE TABLE strings (v VARCHAR(50)); INSERT INTO strings (v) VALUES ('San Francisco'), ('San Jose'), ('Santa Clara'), ('Sacramento');Usar curingas para pesquisar um padrão:
SELECT v FROM strings WHERE v REGEXP 'San* [fF].*' ORDER BY v; +---------------+ | V | |---------------| | San Francisco | +---------------+
O caractere de barra invertida \
é o caractere de escape em expressões regulares, e especifica caracteres especiais ou grupos de caracteres. Por exemplo, \s
é a expressão regular para o espaço branco.
O analisador de cadeias de caracteres do Snowflake, que analisa cadeias de caracteres literais, e também trata a barra invertida como um caractere de escape. Por exemplo, uma barra invertida é usada como parte da sequência de caracteres que especifica um caractere de tabulação. Assim, para criar uma cadeia de caracteres que contenha uma única barra invertida, é necessário especificar duas barras invertidas. Por exemplo, compare a cadeia de caracteres na instrução de entrada abaixo com a cadeia de caracteres correspondente na saída:
INSERT INTO strings (v) VALUES ('Contains embedded single \\backslash') ;SELECT * FROM strings ORDER BY v; +-------------------------------------+ | V | |-------------------------------------| | Contains embedded single \backslash | | Sacramento | | San Francisco | | San Jose | | Santa Clara | +-------------------------------------+
Este exemplo mostra como procurar cadeias de caracteres que começam com “San”, onde “San” é uma palavra completa (por exemplo, não faz parte de “Santa”). \b
é a sequência de escape para um limite de palavras.
select v, v regexp 'San\\b.*' AS MATCHES from strings order by v; +-------------------------------------+---------+ | V | MATCHES | |-------------------------------------+---------| | Contains embedded single \backslash | False | | Sacramento | False | | San Francisco | True | | San Jose | True | | Santa Clara | False | +-------------------------------------+---------+
Este exemplo mostra como procurar um espaço em branco seguido de barra invertida. Note que a única barra invertida a ser procurada é representada por quatro barras invertidas abaixo; para que REGEXP procure por uma barra invertida literal, essa barra invertida deve ter um escape, então você precisará de duas barras invertidas. O analisador de cadeias de caracteres exige que cada uma dessas barras invertidas tenha um caractere de escape, então a expressão contém quatro barras invertidas para representar a única barra invertida que a expressão está procurando:
select v, v regexp '.*\\s\\\\.*' AS MATCHES from strings order by v; +-------------------------------------+---------+ | V | MATCHES | |-------------------------------------+---------| | Contains embedded single \backslash | True | | Sacramento | False | | San Francisco | False | | San Jose | False | | Santa Clara | False | +-------------------------------------+---------+
O exemplo seguinte é o mesmo que o exemplo anterior, exceto que ele usa $$
como delimitador de cadeia de caracteres para dizer ao analisador de cadeia de caracteres que a cadeia de caracteres é literal e que as barras invertidas não devem ser interpretadas como sequências de escape. (As barras invertidas ainda são interpretadas como sequências de escape por REGEXP).
select v, v regexp $$.*\s\\.*$$ AS MATCHES from strings order by v; +-------------------------------------+---------+ | V | MATCHES | |-------------------------------------+---------| | Contains embedded single \backslash | True | | Sacramento | False | | San Francisco | False | | San Jose | False | | Santa Clara | False | +-------------------------------------+---------+