Catégories :

Fonctions de chaîne (expressions régulières)

REGEXP

Renvoie « true » si le sujet correspond au modèle spécifié. Les deux entrées doivent être des expressions textuelles.

REGEXP est similaire à la fonction LIKE, mais avec des expressions régulières étendues POSIX au lieu de la syntaxe de modèle SQL LIKE. Il prend en charge des conditions de correspondance plus complexes que LIKE.

Astuce

Vous pouvez utiliser le service d’optimisation de recherche pour améliorer les performances des requêtes qui appellent cette fonction. Pour plus de détails, voir Service d’optimisation de la recherche.

Alias

RLIKE (2e syntaxe)

Voir aussi : Fonctions de chaîne (expressions régulières)

Syntaxe

<subject> REGEXP <pattern>
Copy

Arguments

Obligatoire :

subject

Sujet devant correspondre.

pattern

Modèle devant correspondre.

Renvoie

Le type de données de la valeur renvoyée est BOOLEAN.

Notes sur l’utilisation

Détails du classement

Arguments with collation specifications are currently not supported.

Exemples

L’exemple ci-dessous montre comment utiliser REGEXP avec une simple expression générique :

Créer la table et y charger les données :

CREATE OR REPLACE TABLE strings (v VARCHAR(50));
INSERT INTO strings (v) VALUES
    ('San Francisco'),
    ('San Jose'),
    ('Santa Clara'),
    ('Sacramento');
Copy

Utiliser des caractères génériques pour rechercher un motif :

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

La barre oblique inversée \ est le caractère d’échappement dans les expressions régulières et spécifie des caractères spéciaux ou des groupes de caractères. Par exemple, \s est l’expression régulière pour les espaces.

L’analyseur de chaîne Snowflake, qui analyse les chaînes littérales, traite également la barre oblique inversée comme un caractère d’échappement. Par exemple, une barre oblique inversée est utilisée dans le cadre de la séquence de caractères qui spécifie un caractère de tabulation. Ainsi, pour créer une chaîne contenant une seule barre oblique inversée, vous devez spécifier deux barres obliques inversées. Par exemple, comparez la chaîne dans l’instruction d’entrée ci-dessous avec la chaîne correspondante dans la sortie :

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

Cet exemple montre comment rechercher des chaînes commençant par « San », où « San » est un mot complet (par exemple ne faisant pas partie de « Santa »). \b est la séquence d’échappement d’une limite de mot.

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

Cet exemple montre comment rechercher un vide suivi d’une barre oblique inversée. Notez que la barre oblique inversée unique à rechercher est représentée par quatre barres obliques inversées ci-dessous ; pour que REGEXP recherche une barre oblique inversée littérale, cette barre oblique inversée doit être échappée, vous avez donc besoin de deux barres obliques inversées. L’analyseur de chaîne requiert que chacune de ces barres obliques inversées soit échappée, de sorte que l’expression contienne quatre barres obliques inversées pour représenter la seule barre oblique inversée que l’expression recherche :

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

L’exemple suivant est le même que l’exemple précédent, sauf qu’il utilise $$ comme délimiteur de chaîne pour indiquer à l’analyseur de chaîne que la chaîne est un littéral et que les barres obliques inversées ne doivent pas être interprétées comme des séquences d’échappement. (Les barres obliques inversées sont toujours interprétées comme des séquences d’échappement par 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