Opérateurs POSIX - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Opérateurs POSIX

Une expression régulière POSIX est une séquence de caractères qui spécifie un modèle de correspondance. Une chaîne correspond à une expression régulière si elle fait partie du jeu régulier décrit par l’expression régulière.

Les expressions régulières POSIX fournissent un moyen plus puissant pour la correspondance de modèle que les opérateurs LIKE et SIMILAR TO. Les modèles d’expressions régulières POSIX peuvent correspondre à une partie quelconque d’une chaîne, contrairement à l’opérateur SIMILAR TO, qui retourne true uniquement si son modèle correspond à la totalité de la chaîne.

Note

La correspondance d’expressions régulières à l’aide des opérateurs POSIX est coûteuse en termes de calcul. Nous vous conseillons d’utiliser LIKE autant que possible, notamment lors du traitement d’un très grand nombre de lignes. Par exemple, les requêtes suivantes sont fonctionnellement identiques, mais la requête qui utilise LIKE s’exécute infiniment plus vite que la requête qui utilise une expression régulière :

select count(*) from event where eventname ~ '.*(Ring|Die).*'; select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';

Syntaxe

expression [ ! ] ~ pattern

Arguments

expression

Expression de caractère UTF-8 valide, comme un nom de colonne.

!

Opérateur de négation. Ne correspond pas à l’expression régulière.

~

Effectuez une correspondance sensible à la casse pour une sous-chaîne d’expression.

Note

~~ est un synonyme pour LIKE.

pattern

Chaîne littérale qui représente un modèle d’expression régulière.

Si pattern ne contient pas de caractères génériques, le modèle représente uniquement la chaîne elle-même.

Pour rechercher des chaînes qui incluent des méta-caractères, tels que « . * | ?  », et ainsi de suite, faites précéder le caractère de la séquence d’échappement composée de deux barres obliques inverses «  \\  »). Contrairement à SIMILAR TO et LIKE, la syntaxe des expressions régulières POSIX ne gère pas de caractère d’échappement défini par l’utilisateur.

Les expressions de caractère peuvent avoir CHAR ou VARCHAR comme type de données. En cas de différence, Amazon Redshift convertit pattern au type de données de l’expression.

Toutes les expressions de caractères peuvent avoir CHAR ou VARCHAR comme type de données. Si les expressions diffèrent par le type de données, Amazon Redshift les convertit au type de données de l’expression.

Le modèle de correspondance POSIX prend en charge les méta-caractères suivants :

POSIX Description
. Met en correspondance un seul caractère.
* Correspond à zéro ou plusieurs occurrences.
+ Correspond à une ou plusieurs occurrences.
? Correspond à zéro ou une occurrence.
| Spécifie d’autres correspondances ; par exemple, E | H signifie E ou H.
^ Correspond au beginning-of-line personnage.
$ Correspond au end-of-line personnage.
$ Correspond à la fin de la chaîne.
[ ] Les crochets spécifient une liste de correspondance, qui doit correspondre à une expression de la liste. L’accent circonflexe (^) précède une liste de non-correspondance, qui correspond à tout caractère à l’exception des expressions représentées dans la liste.
( ) Placez entre parenthèses les éléments d’un groupe sous forme d’un seul élément logique.
{m} Répétez l’élément précédent exactement m fois.
{m,} Répétez l’élément précédent m ou plusieurs fois.
{m,n} Répétez l’élément précédent au moins m fois et pas plus de n fois.
[: :] Correspond à tout caractère au sein d’une classe de caractères POSIX. Dans les classes de caractères suivantes, Amazon Redshift ne prend en charge que les caractères ASCII : [:alnum:], [:alpha:], [:lower:], [:upper:]

Amazon Redshift prend en charge les classes de caractères POSIX suivantes.

Classe de caractères Description
[[:alnum:]] Tous les caractères ASCII alphanumériques
[[:alpha:]] Tous les caractères ASCII alphabétiques
[[:blank:]] Tous les caractères espace
[[:cntrl:]] Tous les caractères de contrôle (non affichables)
[[:digit:]] Tous les chiffres numériques
[[:lower:]] Tous les caractères ASCII alphabétiques minuscules
[[:punct:]] Tous les caractères de ponctuation
[[:space:]] Tous les caractères espace (non affichables)
[[:upper:]] Tous les caractères ASCII alphabétiques majuscules
[[:xdigit:]] Tous les caractères hexadécimaux valides

Amazon Redshift prend en charge les opérateurs suivants, influencés par Perl, dans les expressions régulières. Échappez l’opérateur à l’aide de deux barres obliques inverses («  »). (‘\\’).  

Opérateur Description Expression de classe de caractères équivalente
\\d Un caractère numérique [[:digit:]]
\\D Un caractère non numérique [^[:digit:]]
\\w Un caractère de mot [[:word:]]
\\W Un caractère autre qu’un caractère de mot [^[:word:]]
\\s Un caractère espace blanc [[:space:]]
\\S Un caractère autre qu’un caractère espace blanc [^[:space:]]
\\b Un mot limite

Exemples

Le tableau suivant montre des exemples de correspondance de modèle à l’aide des opérateurs POSIX :

Expression Renvoie
'abc' ~ 'abc' True
'abc' ~ 'a' True
'abc' ~ 'A' False
'abc' ~ '.*(b|d).*' True
'abc' ~ '(b|c).*' True
'AbcAbcdefgefg12efgefg12' ~ '((Ab)?c)+d((efg)+(12))+' True
'aaaaaab11111xy' ~ 'a{6}.[1]{5}(x|y){2}' True
'$0.87' ~ '\\$[0-9]+(\\.[0-9][0-9])?' True
'ab c' ~ '[[:space:]]' True
'ab c' ~ '\\s' True
' ' ~ '\\S' False

L’exemple suivant recherche toutes les villes dont le nom contient E ou H :

SELECT DISTINCT city FROM users WHERE city ~ '.*E.*|.*H.*' ORDER BY city LIMIT 5; city ----------------- Agoura Hills Auburn Hills Benton Harbor Beverly Hills Chicago Heights

L’exemple suivant recherche toutes les villes dont le nom ne contient pas E ou H :

SELECT DISTINCT city FROM users WHERE city !~ '.*E.*|.*H.*' ORDER BY city LIMIT 5; city ----------------- Aberdeen Abilene Ada Agat Agawam

L’exemple suivant utilise la chaîne d’échappement (« \\ ») pour rechercher les chaînes qui incluent un point.

SELECT venuename FROM venue WHERE venuename ~ '.*\\..*' ORDER BY venueid; venuename ------------------------------ St. Pete Times Forum Jobing.com Arena Hubert H. Humphrey Metrodome U.S. Cellular Field Superpages.com Center E.J. Nutter Center Bernard B. Jacobs Theatre St. James Theatre