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

Exemples d'expressions régulières MySQL

Dans MySQL, le REGEXP L'opérateur est utilisé pour déterminer si une chaîne correspond ou non à une expression régulière. C'est un synonyme de REGEXP_LIKE() .

Si la chaîne correspond à l'expression régulière fournie, le résultat est 1 , sinon c'est 0 .

Syntaxe

La syntaxe ressemble à ceci :

expr pat REGEXP

expr est la chaîne d'entrée et pat est l'expression régulière pour laquelle vous testez la chaîne.

Exemple 1 - Expression régulière de base

L'expression régulière la plus basique que nous pouvons utiliser est celle qui ne contient aucun caractère spécial. Ici, nous utilisons simplement une chaîne. Si une partie de la chaîne d'entrée correspond à cette chaîne, elle renvoie une correspondance.

SELECT 'Maïs' REGEXP 'Maïs' AS 'Maïs', 'Gland' REGEXP 'Maïs' AS 'Gland', 'Coin' REGEXP 'Maïs' AS 'Coin', 'Fromage' REGEXP 'Maïs' AS 'Fromage ';

Résultat :

+------+-------+--------+--------+| Maïs | Gland | Coin | Fromage |+------+-------+--------+--------+| 1 | 1 | 1 | 0 |+------+-------+--------+--------+

Exemple 2 - Faire correspondre le début d'une chaîne

Dans cet exemple, l'expression régulière spécifie que la chaîne doit commencer par Co .

SELECT 'Maïs' REGEXP '^Co' AS 'Maïs', 'Gland' REGEXP '^Co' AS 'Gland', 'Fromage' REGEXP '^Co' AS 'Fromage' ;

Résultat :

+------+-------+--------+| Maïs | Gland | Fromage |+------+-------+--------+| 1 | 0 | 0 |+------+-------+--------+

Exemple 3 - Faire correspondre la fin d'une chaîne

Dans cet exemple, l'expression régulière spécifie que la chaîne doit se terminer par rn .

SELECT 'Maïs' REGEXP 'rn$' AS 'Maïs', 'Gland' REGEXP 'rn$' AS 'Gland', 'Fromage' REGEXP 'rn$' AS 'Fromage' ;

Résultat :

+------+-------+--------+| Maïs | Gland | Fromage |+------+-------+--------+| 1 | 1 | 0 |+------+-------+--------+

Exemple 4 - Correspondance avec n'importe quel caractère

Le . caractère correspond à n'importe quel caractère.

SELECT 'Maïs' REGEXP '.' AS 'Maïs', 'Fromage' REGEXP '.' AS 'Fromage', '' REGEXP '.' AS '';

Résultat :

+------+--------+---+| Maïs | Fromage | |+------+--------+---+| 1 | 1 | 0 |+------+--------+---+

Ce caractère est généralement utilisé conjointement avec d'autres caractères pour spécifier d'autres critères. Par exemple :

SELECT 'Maïs' REGEXP '^C.rn$' AS 'Maïs', 'Crn' REGEXP '^C.rn$' AS 'Crn' ;

Résultat :

+------+-----+| Maïs | Crn |+------+-----+| 1 | 0 |+------+-----+

Ici, nous spécifions que la chaîne doit commencer par C , qu'il doit être suivi d'un caractère (n'importe quel caractère) et qu'il doit se terminer par rn .

Notez que ce caractère spécifie une seule instance du caractère. Si vous souhaitez spécifier plusieurs instances (par exemple ee au lieu de simplement e ), vous devrez ajouter plus de . caractères.

SELECT 'Tweet' REGEXP '^Tw..t$' AS 'Tweet', 'Tweat' REGEXP '^Tw..t$' AS 'Tweet', 'Tweet' REGEXP '^Tw.t$' AS 'Tweet', 'Twit' REGEXP '^Tw..t$' AS 'Twit';

Résultat :

+-------+-------+-------+------+| Tweeter | Tweet | Tweeter | Twit |+-------+-------+-------+------+| 1 | 1 | 0 | 0 |+-------+-------+-------+------+

Une autre façon de procéder consiste à spécifier le nombre d'occurrences entre accolades :

SELECT 'Tweet' REGEXP '^Tw.{2}t$' AS 'Tweet', 'Tweat' REGEXP '^Tw.{2}t$' AS 'Tweet', 'Tweet' REGEXP '^Tw. {1}t$' AS 'Tweet', 'Twit' REGEXP '^Tw.{2}t$' AS 'Twit' ;

Résultat :

+-------+-------+-------+------+| Tweeter | Tweet | Tweeter | Twit |+-------+-------+-------+------+| 1 | 1 | 0 | 0 |+-------+-------+-------+------+

Cependant, si vous connaissez le caractère que vous recherchez, vous pouvez spécifier ce caractère (au lieu du . caractère), comme illustré dans l'exemple suivant.

Exemple 5 – Faire correspondre zéro ou plusieurs instances d'un caractère spécifique

Nous pouvons faire ce qui suit pour spécifier zéro ou plusieurs instances du e caractère :

SELECT 'Tweet' REGEXP '^Twe*t$' AS 'Twet', 'Tweet' REGEXP '^Twe*t$' AS 'Tweet', 'Tweeet' REGEXP '^Twe*t$' AS 'Tweeet ', 'Twt' REGEXP '^Twe*t$' AS 'Twt', 'Twit' REGEXP '^Twe*t$' AS 'Twit', 'Twiet' REGEXP '^Twe*t$' AS 'Twiet', 'Tweit' REGEXP '^Twe*t$' AS 'Tweit';

Résultat :

+------+-------+--------+-----+------+-------+- ------+| Tweeter | Tweeter | Tweeter | Twitter | Twit | Twitter | Twitter |+------+-------+--------+-----+------+-------+-- -----+| 1 | 1 | 1 | 1 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

Les quatre premiers correspondent mais pas les trois derniers.

Exemple 6 - Faire correspondre une ou plusieurs instances d'un caractère spécifique

Nous pouvons modifier l'exemple précédent afin de n'obtenir une correspondance que si une ou plusieurs caractères sont trouvés (l'exemple précédent renvoyait une correspondance si zéro ou plus ont été trouvés). Pour ce faire, nous utilisons simplement + au lieu de * :

SELECT 'Tweet' REGEXP '^Twe+t$' AS 'Twet', 'Tweet' REGEXP '^Twe+t$' AS 'Tweet', 'Tweeet' REGEXP '^Twe+t$' AS 'Tweeet ', 'Twt' REGEXP '^Twe+t$' AS 'Twt', 'Twit' REGEXP '^Twe+t$' AS 'Twit', 'Twiet' REGEXP '^Twe+t$' AS 'Twiet', 'Tweit' REGEXP '^Twe+t$' AS 'Tweit';

Résultat :

+------+-------+--------+-----+------+-------+- ------+| Tweeter | Tweeter | Tweeter | Twitter | Twit | Twitter | Twitter |+------+-------+--------+-----+------+-------+-- -----+| 1 | 1 | 1 | 0 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

Dans ce cas, le quatrième mot renvoie un résultat différent de l'exemple précédent.

Exemple 7 - Correspondance à zéro ou à une instance d'un caractère spécifique

Nous pouvons modifier l'exemple précédent afin d'obtenir uniquement une correspondance sur zéro ou sur l'un des caractères souhaités. Pour ce faire, nous utilisons ? :

SELECT 'Tweet' REGEXP '^Twe?t$' AS 'Twet', 'Tweet' REGEXP '^Twe?t$' AS 'Tweet', 'Tweeet' REGEXP '^Twe?t$' AS 'Tweeet ', 'Twt' REGEXP '^Twe?t$' AS 'Twt', 'Twit' REGEXP '^Twe?t$' AS 'Twit', 'Twiet' REGEXP '^Twe?t$' AS 'Twiet', 'Tweit' REGEXP '^Twe?t$' AS 'Tweit';

Résultat :

+------+-------+--------+-----+------+-------+- ------+| Tweeter | Tweeter | Tweeter | Twitter | Twit | Twitter | Twitter |+------+-------+--------+-----+------+-------+-- -----+| 1 | 0 | 0 | 1 | 0 | 0 | 0 |+------+-------+--------+-----+------+-------+-- -----+

Exemple 8 – Alternance

Vous pouvez utiliser le | caractère pour correspondre à l'une ou l'autre suite de caractères :

SELECT 'Tweet' REGEXP 'Tw|et' AS 'Tweet', 'For Let' REGEXP 'Tw|et' AS 'For Let', 'Banana' REGEXP 'Tw|et' AS 'Banana'; 

Résultat :

+-------+---------+--------+| Tweeter | Pour laisser | Banane |+-------+---------+--------+| 1 | 1 | 0 |+-------+---------+--------+

Voici un autre exemple où je recherche des mots entiers :

SELECT 'Chat' REGEXP 'Chat|Chien' AS 'Chat', 'Chien' REGEXP 'Chat|Chien' AS 'Chien', 'Chien' REGEXP 'Chat|Chien' AS 'Chien', 'Banane' REGEXP 'Chat|Chien' AS 'Banane';

Résultat :

+-----+-----+---------+--------+| Chat | Chien | Doggone | Banane |+-----+-----+---------+--------+| 1 | 1 | 1 | 0 |+-----+-----+---------+--------+

Nous obtenons toujours une correspondance même lorsque notre expression régulière ne correspond qu'à une partie de la chaîne.

Exemple 9 – Faire correspondre zéro ou plusieurs instances d'une séquence

Vous pouvez utiliser des crochets avec l'astérisque ()* pour spécifier zéro ou plusieurs instances d'une séquence :

SELECT 'Banana' REGEXP '(an)*' AS 'Banana', 'Land' REGEXP '(an)*' AS 'Land', 'Cheese' REGEXP '(an)*' AS 'Fromage'; 

Résultat :

+--------+------+--------+| Banane | Terrain | Fromage |+--------+------+--------+| 1 | 1 | 1 |+--------+------+--------+

Autre exemple :

SELECT 'Banana' REGEXP '^B(an)*d$' AS 'Banana', 'Band' REGEXP '^B(an)*d$' AS 'Band', 'Bald' REGEXP '^B( an)*d$' AS 'Chauve', 'Mauvais' REGEXP '^B(an)*d$' AS 'Mauvais';

Résultat :

+--------+------+------+-----+| Banane | Bande | Chauve | Mauvais |+--------+------+------+-----+| 0 | 1 | 0 | 0 |+--------+------+------+-----+

Exemple 10 – Répétition

Comme vu dans un exemple précédent, vous pouvez utiliser des accolades pour spécifier la répétition. Cette notation fournit une manière plus générale d'écrire des expressions régulières que certains des exemples précédents :

SELECT 'Tweeet' REGEXP 'e{3}' AS 'Tweeet', 'Tweet' REGEXP 'e{3}' AS 'Tweet';

Résultat :

+--------+-------+| Tweeter | Tweet |+--------+-------+| 1 | 0 |+--------+-------+

Exemple 11 – Portée

Vous pouvez utiliser le trait d'union pour spécifier une plage. Voici un exemple qui spécifie une plage de nombres :

SELECT 'Tweet 123' REGEXP '[0-9]' AS 'Tweet 123', 'Tweet ABC' REGEXP '[0-9]' AS 'Tweet ABC';

Résultat :

+--------+-------+| Tweeter | Tweet |+--------+-------+| 1 | 0 |+--------+-------+

Et l'exemple suivant spécifie une plage de lettres :

SELECT 'Tweet 123' REGEXP '[A-Z]' AS 'Tweet 123', 'ABC' REGEXP '[A-Z]' AS 'ABC', '123' REGEXP '[A-Z]' AS '123'; 

Résultat :

+--------+-------+| Tweeter | Tweet |+--------+-------+| 1 | 0 |+--------+-------+

Voici ce qui se passe si nous limitons la plage de nombres :

SELECT '123' REGEXP '[1-3]' AS '123', '012' REGEXP '[1-3]' AS '012', '045' REGEXP '[1-3]' AS '045 ';

Résultat :

+-----+-----+-----+| 123 | 012 | 045 |+-----+-----+-----+| 1 | 1 | 0 |+-----+-----+-----+

Exemple 12 - Pas dans une plage

Nous pouvons utiliser le ^ caractère pour modifier l'exemple précédent afin d'exclure la plage de caractères spécifiée :

SELECT '123' REGEXP '[^1-3]' AS '123', '012' REGEXP '[^1-3]' AS '012', '045' REGEXP '[^1-3]' COMME '045';

Résultat :

+-----+-----+-----+| 123 | 012 | 045 |+-----+-----+-----+| 0 | 1 | 1 |+-----+-----+-----+

Nous obtenons donc le résultat inverse de l'exemple précédent.