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.

Alias

RLIKE (2e syntaxe)

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

Syntaxe

<subject> REGEXP <pattern>

Notes sur l’utilisation

  • La fonction ancre implicitement un motif aux deux extrémités (c.-à-d. que '' devient automatiquement '^$' et 'ABC' devient automatiquement '^ABC$'). Pour faire correspondre n’importe quelle chaîne commençant par ABC, le motif serait 'ABC.*'.

  • Pour plus de notes d’utilisation, voir Notes générales sur l’utilisation pour les fonctions d’expression régulière.

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

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

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

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

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

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