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

Ces fonctions de chaîne effectuent des opérations qui correspondent à une expression régulière (souvent appelée « regex »).

Dans ce chapitre :

Liste des fonctions Regex

Fonction

Notes

REGEXP

Alias pour RLIKE.

REGEXP_COUNT

REGEXP_INSTR

REGEXP_LIKE

Alias pour RLIKE.

REGEXP_REPLACE

REGEXP_SUBSTR

RLIKE

Notes générales sur l’utilisation

Dans ces chapitres, « sujet » désigne la chaîne sur laquelle opérer et « motif » fait référence à l’expression régulière :

  • Le sujet est généralement une colonne variable, alors que le motif est généralement une constante, mais cela n’est pas nécessaire ; chaque argument d’une fonction d’expression régulière peut être une constante ou une variable.

  • Les motifs prennent en charge la syntaxe POSIX ERE (Extended Regular Expression) complète. Pour plus de détails, consultez la section POSIX de base et étendue (sur Wikipedia).

  • Les motifs prennent également en charge les séquences backlash Perl suivantes :

    • \d : chiffre décimal (0-9).

    • \D : pas un chiffre décimal.

    • \s : caractère d’espacement.

    • \S : pas un caractère d’espacement.

    • \w : caractère « mot » (az, AZ, trait de soulignement (« _ ») ou chiffre décimal).

    • \W : pas un caractère de mot.

    • \b : limite de mot.

    • \B : pas une limite de mot.

    Pour plus de détails, voir la section Classes de caractères (Wikipédia) ou la section Séquences backlash (documentation Perl).

    Notez que le caractère backslash doit faire l’objet d’un échappement (\\ devient \). Pour plus d’informations, voir Caractères d’échappement et mises en garde (dans ce chapitre).

  • Par défaut, le caractère générique POSIX . (dans le motif) n’inclut pas de caractères de nouvelle ligne \n (dans le sujet) comme correspondances.

    Pour faire correspondre également les caractères de nouvelle ligne, remplacez . par (.|\n) dans l’argument motif ou utilisez le paramètre s dans l’argument paramètres (décrit ci-dessous).

  • Toutes les fonctions d’expression régulière prennent en charge le format Unicode. Un seul caractère Unicode compte toujours pour un caractère (c’est-à-dire que le métacaractère POSIX . correspond exactement à un seul caractère Unicode), quelle que soit la longueur des octets de la représentation binaire correspondant à ce caractère. De plus, pour les fonctions qui acceptent ou renvoient des décalages de sujet, un seul caractère Unicode compte pour 1.

Paramètres

La plupart des fonctions d’expression régulière acceptent un argument paramètres facultatif comme toute dernière entrée. L’argument paramètres est une chaîne VARCHAR qui spécialise le comportement de correspondance de la fonction d’expression régulière. Les paramètres suivants sont pris en charge :

Paramètre

Effet

c

Permet une correspondance sensible à la casse.

i

Permet une correspondance insensible à la casse.

m

Active le mode multiligne (c’est-à-dire que les métacaractères ^ et $ marquent le début et la fin de toute ligne du sujet). Par défaut, le mode multiligne est désactivé (^ et $ marquent le début et la fin du sujet entier).

e

Extraits les sous-correspondances ; ne s’applique qu’à REGEXP_INSTR et REGEXP_SUBSTR .

s

Permet de faire correspondre le caractère générique POSIX . avec \n. Par défaut, la correspondance des caractères génériques est désactivée.

La chaîne par défaut est simplement c, qui spécifie :

  • Reconnaissance sensible à la casse.

  • Mode à une ligne.

  • Pas d’extraction de sous-correspondance, sauf pour REGEXP_REPLACE, qui utilise toujours l’extraction de sous-correspondances.

  • Le caractère générique POSIX . ne correspond pas aux caractères de nouvelle ligne \n.

When specifying multiple parameters, the string is entered with no spaces or delimiters. For example, ims specifies case-insensitive matching in multi-line mode with POSIX wildcard matching.

Si c et i sont inclus dans la chaîne paramètres , celle qui apparaît en dernier dans la chaîne détermine si la fonction effectue une correspondance sensible à la casse ou non. Par exemple, ci spécifie une correspondance sensible à la casse, car « i » apparaît en dernier dans la chaîne.

Références arrière

Snowflake ne prend pas en charge les références arrières dans des motifs d’expressions régulières (connus comme « carrés » dans la théorie du langage formel) ; cependant, les références arrières sont prises en charge dans la chaîne de remplacement de la fonction REGEXP_REPLACE.

Corner Cases

Dans la plupart des fonctions regexp, un motif vide (c’est-à-dire '') ne correspond à rien, pas même à un sujet vide.

The exceptions are REGEXP_LIKE and its aliases REGEXP and RLIKE, in which the empty pattern matches the empty subject because the pattern is implicitly anchored at both ends (i.e. '' automatically becomes '^$').

Un groupe vide (sous-expression ()) correspond à l’espace entre les caractères, y compris le début et la fin du sujet.

Caractères d’échappement et mises en garde

Comme l’exige la norme POSIX, le caractère antislash unique \ est utilisé pour effectuer un échappement de métacaractères (par exemple \* ou \?). Le caractère backslash est également utilisé pour les séquences dites de backslash (par exemple \w).

Notez que le caractère backslash est également utilisé pour insérer des caractères de contrôle dans des chaînes SQL (par exemple \n pour insérer une nouvelle ligne). Par conséquent, pour insérer un seul caractère backslash dans une chaîne littérale SQL, le caractère backslash doit faire l’objet d’un échappement (c’est-à-dire que \\ devient \).

Par exemple, pour insérer la référence arrière \1 dans une chaîne de remplacement littérale de REGEXP_LIKE, vous devrez peut-être utiliser \\\\1.