AnalyticDB for MySQL prend en charge les fonctions d'expression régulière suivantes pour la recherche de motifs, l'extraction et le remplacement dans les requêtes SQL.
REGEXP_INSTR — renvoie la position d'une correspondance
REGEXP_MATCHES — renvoie un tableau contenant toutes les sous-chaînes correspondantes
REGEXP_REPLACE — remplace les sous-chaînes correspondantes
REGEXP_SUBSTR — renvoie une sous-chaîne correspondante
Prérequis
Avant de commencer, vérifiez que :
La version mineure du moteur du cluster AnalyticDB for MySQL est la 3.1.5.10 ou une version ultérieure.
Pour vérifier la version mineure du moteur, consultez la rubrique Comment afficher la version d'un cluster AnalyticDB for MySQL ?
REGEXP_INSTR
regexp_instr(source, pattern[, position[, occurrence[, option]]])
Renvoie un entier indiquant la position de début ou de fin de la première (ou N-ième) sous-chaîne de source qui correspond à pattern. Renvoie 0 si aucune correspondance n'est trouvée.
Paramètres
Obligatoire :
| Paramètre | Type | Description |
|---|---|---|
source |
VARCHAR | La chaîne à rechercher. |
pattern |
— | L'expression régulière à utiliser pour la correspondance. |
Facultatif :
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
position |
BIGINT | 1 |
La position du caractère dans source où commence la recherche. |
occurrence |
BIGINT | 1 |
L'occurrence de la correspondance à renvoyer. |
option |
BIGINT | 0 |
Indique s'il faut renvoyer la position de début de la correspondance (0) ou la position immédiatement après la fin de la correspondance (1). |
Valeur de retour
Renvoie une valeur de type BIGINT. Renvoie 0 si aucune correspondance n'est trouvée.
Exemples
Renvoyer la position de début de la première correspondance
SELECT REGEXP_INSTR('dog cat dog', 'dog') as res;
+-----+
| res |
+-----+
| 1 |
+-----+
Renvoyer la position de début de la deuxième correspondance
SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 2) as res;
+-----+
| res |
+-----+
| 9 |
+-----+
Renvoyer la position située après la fin de la première correspondance
SELECT REGEXP_INSTR('dog cat dog', 'dog', 1, 1, 1) as res;
+-----+
| res |
+-----+
| 4 |
+-----+
REGEXP_MATCHES
regexp_matches(source, pattern[, flag])
Renvoie un ARRAY(ARRAY(VARCHAR)) contenant toutes les sous-chaînes de source qui correspondent à pattern. Renvoie un tableau vide si aucune correspondance n'est trouvée.
Sans l'indicateur
g: renvoie uniquement la première correspondance.Avec l'indicateur
g: renvoie toutes les correspondances.Si
patterncontient des groupes de capture, les sous-chaînes correspondantes de chaque groupe sont renvoyées sous forme de tableaux imbriqués. Sinon, la correspondance complète est renvoyée.
Pour obtenir une seule chaîne correspondante plutôt qu'un tableau, utilisez la fonction REGEXP_SUBSTR à la place.
Paramètres
Obligatoire :
| Paramètre | Type | Description |
|---|---|---|
source |
VARCHAR | La chaîne à rechercher. |
pattern |
— | L'expression régulière à utiliser pour la correspondance. |
Facultatif :
| Paramètre | Type | Description |
|---|---|---|
flag |
VARCHAR | Un ou plusieurs caractères qui contrôlent le comportement de la correspondance. Utilisez g pour renvoyer toutes les correspondances au lieu de la première uniquement. |
Valeur de retour
Renvoie un ARRAY(ARRAY(VARCHAR)). Renvoie un tableau vide si aucune correspondance n'est trouvée.
Exemples
Correspondance avec des groupes de capture (première correspondance uniquement)
SELECT regexp_matches('foobarbequebaz', '(bar)(beque)');
+---------------------+
| regexp_matches |
+---------------------+
| [["bar","beque"]] |
Correspondance sans groupes de capture
SELECT regexp_matches('foobarbequebaz', 'barbeque');
+---------------------+
| regexp_matches |
+---------------------+
| [["barbeque"]] |
Faire correspondre toutes les occurrences à l'aide de l'indicateur g
SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g');
+------------------------------------------+
| regexp_matches |
+------------------------------------------+
| [["bar","beque"], ["bazil","barf"]] |
REGEXP_REPLACE
regexp_replace(source, pattern, replacement[, position[, occurrence]])
Remplace les sous-chaînes de source qui correspondent à pattern par replacement. Par défaut, remplace toutes les correspondances en commençant par le premier caractère. Renvoie la chaîne d'origine si aucune correspondance n'est trouvée.
Paramètres
Obligatoire :
| Paramètre | Type | Description |
|---|---|---|
source |
VARCHAR | La chaîne à rechercher. |
pattern |
— | L'expression régulière à utiliser pour la correspondance. |
replacement |
VARCHAR | La chaîne de substitution pour chaque correspondance. |
Facultatif :
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
position |
BIGINT | 1 |
La position du caractère dans source où commence la recherche. |
occurrence |
BIGINT | 0 |
L'occurrence à remplacer. La valeur 0 remplace toutes les correspondances ; un entier positif ne remplace que cette occurrence spécifique. |
Valeur de retour
Renvoie une valeur de type VARCHAR. Renvoie la chaîne d'origine si aucune correspondance n'est trouvée.
Exemples
Remplacer toutes les correspondances
SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X') as res;
+-------+
| res |
+-------+
| X X X |
+-------+
Remplacer uniquement la troisième correspondance
SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3) as res;
+-----------+
| res |
+-----------+
| abc def X |
+-----------+
REGEXP_SUBSTR
regexp_substr(source, pattern[, position[, occurrence]])
Renvoie la sous-chaîne de source qui correspond à pattern. Renvoie NULL si aucune correspondance n'est trouvée.
Paramètres
Obligatoire :
| Paramètre | Type | Description |
|---|---|---|
source |
VARCHAR | La chaîne à rechercher. |
pattern |
— | L'expression régulière à utiliser pour la correspondance. |
Facultatif :
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
position |
BIGINT | 1 |
La position du caractère dans source où commence la recherche. |
occurrence |
BIGINT | 1 |
L'occurrence de la correspondance à renvoyer. |
Valeur de retour
Renvoie une valeur de type VARCHAR. Renvoie NULL si aucune correspondance n'est trouvée.
Exemples
Renvoyer la troisième correspondance
SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3) as res;
+------+
| res |
+------+
| ghi |
+------+
Renvoyer la première correspondance (comportement par défaut)
SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+') as res;
+------+
| res |
+------+
| abc |
+------+