Categorias:

Funções de cadeia de caracteres (expressões regulares)

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>
Copy

Argumentos

Obrigatório:

subject

Sujeito à correspondência.

pattern

Padrão a atender.

Retornos

O tipo de dados do valor retornado é BOOLEAN.

Notas de uso

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');
Copy

Usar curingas para pesquisar um padrão:

SELECT v
    FROM strings
    WHERE v REGEXP 'San* [fF].*'
    ORDER BY v;
+---------------+
| V             |
|---------------|
| San Francisco |
+---------------+
Copy

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')
    ;
Copy
SELECT * 
    FROM strings
    ORDER BY v;
+-------------------------------------+
| V                                   |
|-------------------------------------|
| Contains embedded single \backslash |
| Sacramento                          |
| San Francisco                       |
| San Jose                            |
| Santa Clara                         |
+-------------------------------------+
Copy

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   |
+-------------------------------------+---------+
Copy

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   |
+-------------------------------------+---------+
Copy

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   |
+-------------------------------------+---------+
Copy