Maison  >  Article  >  base de données  >  Résumé sur l'utilisation des expressions régulières REGEXP dans MySQL

Résumé sur l'utilisation des expressions régulières REGEXP dans MySQL

小云云
小云云original
2018-01-13 13:54:181909parcourir

J'avais l'habitude d'utiliser like pour rechercher des données. Plus tard, j'ai découvert qu'il existe des expressions régulières dans mysql et je pense que les performances sont meilleures que like. Maintenant, je vais partager avec vous une explication détaillée de l'utilisation des expressions régulières mysql REGEXP. . J'espère que cette méthode sera utile à tout le monde.

Une expression régulière décrit un ensemble de chaînes. L'expression régulière la plus simple est celle qui ne contient aucun caractère spécial. Par exemple, l'expression régulière bonjour correspond à bonjour.

Les expressions régulières non triviales adoptent des structures spécifiques spéciales qui leur permettent de correspondre à plus d'une chaîne. Par exemple, l'expression régulière bonjour|mot correspond à la chaîne bonjour ou à la chaîne mot.

À titre d'exemple plus complexe, l'expression régulière B[an]*s correspond à l'une des chaînes suivantes : Bananas, Baaaaas, Bs et les chaînes commençant par B, se terminant par s et se terminant par Toute autre chaîne contenant un nombre quelconque de caractères a ou n.

Voici les schémas disponibles pour les tables avec l'opérateur REGEXP.

Exemple d'application, rechercher des enregistrements d'utilisateurs avec un format de courrier électronique incorrect dans la table des utilisateurs :


SELECT * 
FROM users
WHERE email NOT REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}$'

Base de données MySQL La syntaxe des expressions régulières comprend principalement la signification de divers symboles.

(^) le caractère

correspond à la position de départ de la chaîne, par exemple "^a" signifie une chaîne commençant par la lettre a.


mysql> select 'xxxyyy' regexp '^xx';

+-----------------------+
| 'xxxyyy' regexp '^xx' |
+-----------------------+
|           1 |
+-----------------------+
1 row in set (0.00 sec)

Requérez si la chaîne xxxyyy commence par xx. La valeur du résultat est 1, ce qui signifie que la valeur est vraie et que la condition est remplie. Le caractère

($)

correspond à la position de fin de la chaîne, par exemple "X^" signifie une chaîne se terminant par la lettre X.

(.) Le caractère

est le point en anglais. Il correspond à n'importe quel caractère, y compris le retour chariot, le saut de ligne, etc.

(*) caractères

L'astérisque correspond à 0 caractère ou plus et il doit y avoir du contenu avant lui. Par exemple :


mysql> select 'xxxyyy' regexp 'x*';

Cette instruction SQL, la correspondance régulière est vraie.

(+) caractères

Le signe plus correspond à 1 ou plusieurs caractères, et il doit également y avoir du contenu avant lui. Le signe plus est utilisé de la même manière que l'astérisque, sauf que l'astérisque peut apparaître 0 fois et que le signe plus doit apparaître au moins une fois.

(?) caractère

point d'interrogation correspond 0 ou 1 fois.

Exemple :

Désormais, selon le tableau ci-dessus, différents types de requêtes SQL peuvent être installés pour répondre aux exigences. Voici quelques compréhensions. Considérons que nous avons une table comme person_tbl et un champ nommé name :

Requête pour trouver tous les noms commençant par 'st'


mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

Requête Rechercher tous les noms se terminant par 'ok'


mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

Requête pour trouver toutes les chaînes de noms contenant 'mar'


mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

La requête trouve tous les noms commençant par une voyelle et se terminant par 'ok'


mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

dans une expression régulière, vous pouvez utiliser la rétention suivante La chaîne correspondante par le mot

^

commence par la chaîne suivante


mysql> select "fonfo" REGEXP "^fo$"; -> 0(表示不匹配) 
mysql> select "fofo" REGEXP "^fo"; -> 1(表示匹配)

$

correspond à une chaîne se terminant par la chaîne précédente


mysql> select "fono" REGEXP "^fono$"; -> 1(表示匹配) 
mysql> select "fono" REGEXP "^fo$"; -> 0(表示不匹配) 
.

correspond à n'importe quel caractère (y compris la nouvelle ligne)


mysql> select "fofo" REGEXP "^f.*"; -> 1(表示匹配) 
mysql> select "fonfo" REGEXP "^f.*"; -> 1(表示匹配)

a*

Correspond à n'importe quel nombre de a (y compris la chaîne vide)


mysql> select "Ban" REGEXP "^Ba*n"; -> 1(表示匹配) 
mysql> select "Baaan" REGEXP "^Ba*n"; -> 1(表示匹配) 
mysql> select "Bn" REGEXP "^Ba*n"; -> 1(表示匹配)

a+

correspond à n'importe quel nombre de a (à l'exclusion de la chaîne vide)


mysql> select "Ban" REGEXP "^Ba+n"; -> 1(表示匹配) 
mysql> select "Bn" REGEXP "^Ba+n"; -> 0(表示不匹配)

a ?

correspond à un ou zéro a


mysql> select "Bn" REGEXP "^Ba?n"; -> 1(表示匹配) 
mysql> select "Ban" REGEXP "^Ba?n"; -> 1(表示匹配) 
mysql> select "Baan" REGEXP "^Ba?n"; -> 0(表示不匹配)

de|abc

correspond à de ou abc


mysql> select "pi" REGEXP "pi|apa"; -> 1(表示匹配) 
mysql> select "axe" REGEXP "pi|apa"; -> 0(表示不匹配) 
mysql> select "apa" REGEXP "pi|apa"; -> 1(表示匹配) 
mysql> select "apa" REGEXP "^(pi|apa)$"; -> 1(表示匹配) 
mysql> select "pi" REGEXP "^(pi|apa)$"; -> 1(表示匹配) 
mysql> select "pix" REGEXP "^(pi|apa)$"; -> 0(表示不匹配)

(abc)*

correspond à n'importe quel nombre d'abc (y compris la chaîne vide)


mysql> select "pi" REGEXP "^(pi)*$"; -> 1(表示匹配) 
mysql> select "pip" REGEXP "^(pi)*$"; -> 0(表示不匹配) 
mysql> select "pipi" REGEXP "^(pi)*$"; -> 1(表示匹配)

{1}
{2,3}

C'est une méthode plus complète, elle peut réaliser les fonctions de plusieurs mots réservés précédents

a*

peuvent être écrits comme a{0,}

a+

peuvent être écrits comme a{1,}

a?

peut être écrit sous la forme a{0,1}

Il n'y a qu'un seul paramètre entier i dans {} , indiquant que le caractère ne peut apparaître que i fois ; il y a un paramètre entier i dans {}, suivi d'un ",", indiquant que le caractère peut apparaître i fois ou plus de i fois ; il n'y a qu'un seul paramètre entier i dans {}, suivi de Suivi d'un "," puis d'un paramètre entier j, cela signifie que le caractère ne peut apparaître que plus de i fois et moins de j fois (y compris i fois et j fois). Le paramètre entier doit être supérieur ou égal à 0 et inférieur ou égal à RE_DUP_MAX (la valeur par défaut est 255). S'il y a deux paramètres, le second doit être supérieur ou égal au premier

[a-dX]

correspond à "a", "b", "c", "d" ou " "

"[", "]" doivent être utilisés par paires

Recommandations associées :

mysql> select "aXbc" REGEXP "[a-dXYZ]"; -> 1(表示匹配) 
mysql> select "aXbc" REGEXP "^[a-dXYZ]$"; -> 0(表示不匹配) 
mysql> select "aXbc" REGEXP "^[a-dXYZ]+$"; -> 1(表示匹配) 
mysql> select "aXbc" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配) 
mysql> select "gheis" REGEXP "^[^a-dXYZ]+$"; -> 1(表示匹配) 
mysql> select "gheisa" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配)

L'expression régulière JS réalise parfaitement l'étalonnage de la carte d'identité Fonction d'inspection

Comment utiliser des expressions régulières pour mettre en évidence le code JavaScript

javascript correspond au code de l'expression régulière commenté dans js

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn