- Catégories :
[ NOT ] REGEXP¶
Effectue une comparaison pour déterminer si une chaîne correspond ou non à un modèle spécifié. Les deux entrées doivent être des expressions textuelles.
REGEXP est similaire à la fonction [ NOT ] 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:
[ NOT ] RLIKE (2e syntaxe)
Voir aussi : Fonctions de chaîne (expressions régulières)
Syntaxe¶
<subject> [ NOT ] REGEXP <pattern>
Arguments¶
Obligatoire :
subject
Sujet devant correspondre.
pattern
Modèle devant correspondre.
Renvoie¶
Renvoie un BOOLEAN ou un NULL.
Lorsque REGEXP est spécifié, la valeur est TRUE s’il y a une correspondance. Sinon, renvoie FALSE.
Lorsque NOT REGEXP est spécifié, la valeur est TRUE s’il n’y a pas de correspondance. Sinon, renvoie FALSE.
Lorsque REGEXP ou NOT REGEXP est spécifié, renvoie NULL si l’un des arguments est NULL.
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.*'
.Le caractère barre oblique inverse (
\
) est le caractère d’échappement. Pour plus d’informations, voir Spécification d’expressions régulières dans des constantes de chaîne entre guillemets simples.Pour plus de notes sur l’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 | +-------------------------------------+---------+