Mysql
 sql >> Base de données >  >> RDS >> Mysql

Fonctionnement de la fonction REGEX_REPLACE() dans MySQL

Dans MySQL, le REGEXP_REPLACE() La fonction remplace les occurrences de la sous-chaîne dans une chaîne qui correspond au modèle d'expression régulière donné.

La chaîne entière est renvoyée avec les remplacements.

S'il n'y a pas de correspondance (c'est-à-dire que la chaîne d'entrée ne contient pas la sous-chaîne), la chaîne entière est renvoyée inchangée.

Syntaxe

La syntaxe ressemble à ceci :

REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])

expr est la chaîne d'entrée et pat est le modèle d'expression régulière pour la sous-chaîne. Le repl l'argument est la chaîne de remplacement.

Le pos facultatif L'argument vous permet de spécifier une position dans la chaîne pour lancer la recherche. S'il est omis, il commence à la position 1.

L'option occurrence L'argument vous permet de spécifier l'occurrence de la correspondance à rechercher. Si omis, toutes les occurrences sont remplacées.

Le match_type facultatif argument est une chaîne qui spécifie comment effectuer la correspondance. Cela vous permet d'affiner l'expression régulière. Par exemple, vous pouvez utiliser cet argument pour spécifier ou non une correspondance sensible à la casse.

Exemple 1 - Utilisation de base

Voici un exemple de base :

SET @str = 'It was good';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'good', 'great!') 'Result';

Résultat :

+-----------------+---------------+
| Original String | Result        |
+-----------------+---------------+
| It was good     | It was great! |
+-----------------+---------------+

Dans ce cas, il y a correspondance et la chaîne est renvoyée avec la modification.

Exemple 2 – Plusieurs correspondances

Par défaut, s'il existe plusieurs correspondances dans la chaîne, elles sont toutes remplacées :

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger') 'Result';

Résultat :

+---------------------+---------------------------+
| Original String     | Result                    |
+---------------------+---------------------------+
| Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
+---------------------+---------------------------+

Cependant, vous avez également la possibilité de spécifier l'occurrence que vous souhaitez remplacer (nous en reparlerons plus tard).

Exemple 3 – Aucune correspondance

Voici un exemple où il n'y a pas de correspondance :

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cow', 'Tiger') 'Result';

Résultat :

+---------------------+---------------------+
| Original String     | Result              |
+---------------------+---------------------+
| Cat Dog Cat Dog Cat | Cat Dog Cat Dog Cat |
+---------------------+---------------------+

Il n'y a pas de correspondance, donc la chaîne est retournée inchangée.

Exemple 4 – Le pos Argumentation

Voici un exemple de spécification de la position de départ :

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 2) 'Result';

Résultat :

+---------------------+-------------------------+
| Original String     | Result                  |
+---------------------+-------------------------+
| Cat Dog Cat Dog Cat | Cat Dog Tiger Dog Tiger |
+---------------------+-------------------------+

Nous avons commencé à la position 2, qui vient après le début de la première occurrence, donc l'opération de remplacement n'affecte que les occurrences qui viennent après la première.

Exemple 5 – L'occurrence Argumentation

Comme mentionné, par défaut, toutes les occurrences sont remplacées. Cependant, vous avez également la possibilité de spécifier une occurrence spécifique à remplacer en utilisant le occurrence argument. Voici un exemple :

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 1, 2) 'Result';

Résultat :

+---------------------+-----------------------+
| Original String     | Result                |
+---------------------+-----------------------+
| Cat Dog Cat Dog Cat | Cat Dog Tiger Dog Cat |
+---------------------+-----------------------+

Dans ce cas, nous commençons à la position 1. Cependant, si nous commençons à une position différente, le résultat est différent :

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 2, 2) 'Result';

Résultat :

+---------------------+-----------------------+
| Original String     | Result                |
+---------------------+-----------------------+
| Cat Dog Cat Dog Cat | Cat Dog Cat Dog Tiger |
+---------------------+-----------------------+

Cela s'est produit parce que notre position de départ est survenue après le début de la première occurrence. Par conséquent, l'occurrence 2 est devenue l'occurrence 1 et l'occurrence 3 est devenue l'occurrence 2.

La valeur par défaut de l'argument d'occurrence est 0 , ce qui signifie que toutes les occurrences sont remplacées. En d'autres termes, si vous omettez cet argument, toutes les occurrences sont remplacées (comme nous l'avons vu dans les exemples précédents). Voici un exemple de spécification explicite de toutes les occurrences :

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 1, 0) 'Result';

Résultat :

+---------------------+---------------------------+
| Original String     | Result                    |
+---------------------+---------------------------+
| Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
+---------------------+---------------------------+

Exemple 6 – Le match_type Argumentation

Vous pouvez fournir un argument supplémentaire pour déterminer le type de correspondance. Cela vous permet de spécifier des choses comme si la correspondance est ou non sensible à la casse, s'il faut ou non inclure des fins de ligne, etc.

Voici un exemple de spécification d'une correspondance sensible à la casse et d'une correspondance insensible à la casse :

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'cat', 'Tiger', 1, 0, 'c') 'Case-Sensitive',
  REGEXP_REPLACE(@str, 'cat', 'Tiger', 1, 0, 'i') 'Case-Insensitive';

Résultat :

+---------------------+---------------------+---------------------------+
| Original String     | Case-Sensitive      | Case-Insensitive          |
+---------------------+---------------------+---------------------------+
| Cat Dog Cat Dog Cat | Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
+---------------------+---------------------+---------------------------+

Le match_type l'argument peut contenir les caractères suivants :

c
Correspondance sensible à la casse.
i
Correspondance insensible à la casse.
m
Mode multiligne. Reconnaître les terminaisons de ligne dans la chaîne. Le comportement par défaut consiste à faire correspondre les fins de ligne uniquement au début et à la fin de l'expression de chaîne.
n
Le . caractère correspond aux fins de ligne. La valeur par défaut est pour . correspondant à s'arrêter à la fin d'une ligne.
u
Fin de ligne UNIX uniquement. Seul le caractère de nouvelle ligne est reconnu comme une ligne se terminant par le . , ^ , et $ opérateurs de correspondance.