Maison > base de données > tutoriel mysql > le corps du texte

Discussion détaillée sur la correspondance de modèles MYSQL avec REGEXP et le partage d'utilisation du code

黄舟
Libérer: 2017-03-25 13:42:05
original
1825 Les gens l'ont consulté

L'éditeur ci-dessous vous apportera un cliché MYSQLUtilisation de REGEXP de correspondance de modèles et autres. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur pour jeter un oeil.

J'aime

J'aimeExige que l'intégralité des données soit nécessaire. match. REGEXP ne nécessite qu’une correspondance partielle.
En d'autres termes, pour utiliser Like, tout le contenu de ce champ doit remplir les conditions, tandis que REGEXP n'a besoin que d'un seul fragment pour remplir les conditions.

MySQL fournit une correspondance de modèles SQL standard (like), ainsi qu'un format étendu de correspondance de modèles expression régulière basé sur des utilitaires Unix comme vi, grep et sed ( regexp).
La correspondance de modèles SQL vous permet d'utiliser "_" pour faire correspondre n'importe quel caractère et "%" pour faire correspondre n'importe quel nombre de caractères (y compris zéro caractère). Dans MySQL, le mode SQL par défaut ignore la casse . Quelques exemples sont présentés ci-dessous. Notez que lorsque vous utilisez le mode SQL, vous ne pouvez pas utiliser = ou != à la place, utilisez l'opérateur de comparaison LIKE ou NOT LIKE .

Pour rechercher des noms commençant par "b" :

mysql> SELECT * FROM pet WHERE name LIKE "b%";
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
Copier après la connexion

Pour rechercher des noms commençant par "fy" :

mysql> SELECT * FROM pet WHERE name LIKE "%fy";
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
Copier après la connexion

Pour rechercher des noms contenant un "w" :

mysql> SELECT * FROM pet WHERE name LIKE "%w%";
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
Copier après la connexion

Pour rechercher des noms contenant Pour un nom de exactement 5 caractères, utilisez le caractère de motif "_" :

mysql> SELECT * FROM pet WHERE name LIKE "_";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
Copier après la connexion

REGEXP

Une autre correspondance est basée sur des expressions régulières . Lorsque vous testez des correspondances sur de tels modèles, utilisez les opérateurs REGEXP et NOT REGEXP (ou RLIKE et NOT RLIKE, qui sont des synonymes).

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

Une classe de caractères "[...]" correspond à n'importe quel caractère entre crochets. Par exemple, "[abc]" correspond à "a", "b" ou "c". Pour nommer une plage de caractères, utilisez un "-". "[a-z]" correspond à n'importe quelle lettre minuscule, tandis que "[0-9]" correspond à n'importe quel nombre.
" * " correspond à zéro ou plusieurs des éléments qui le précèdent. Par exemple, "x*" correspond à n'importe quel nombre de caractères "x", "[0-9]*" correspond à n'importe quel nombre de chiffres et ".*" correspond à n'importe quel nombre de n'importe quoi.

Les expressions régulières sont sensibles à la casse, mais si vous le souhaitez, vous pouvez utiliser une classe de caractères pour faire correspondre les deux écritures. Par exemple, "[aA]" correspond à un "a" minuscule ou majuscule et "[a-zA-Z]" correspond à n'importe quelle lettre écrite dans un sens ou dans l'autre.

Les modèles correspondent s'ils apparaissent n'importe où dans la valeur testée (les modèles SQL correspondent tant qu'ils correspondent à la valeur entière).
Pour positionner un motif de manière à ce qu'il corresponde au début ou à la fin de la valeur testée, utilisez "^" au début du motif ou "$" à la fin du modèle.
Pour illustrer le fonctionnement des expressions régulières étendues, la requête LIKE présentée ci-dessus est réécrite ci-dessous à l'aide de REGEXP : Pour les noms commençant par, utilisez "^" pour faire correspondre le début du nom et " [bB]" pour faire correspondre un "b" minuscule ou majuscule :
Pour rechercher des noms se terminant par "fy" Pour rechercher des noms contenant un "w", utilisez "[ wW]" pour faire correspondre un "w" minuscule ou majuscule :

mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
Copier après la connexion


[^……], correspond aux caractères non inclus dans [], comme la recherche de noms commençant par w/z/s

mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
Copier après la connexion


*, répété 0 fois ou plus Les étudiants qui connaissent

javascript
mysql> SELECT * FROM pet WHERE name REGEXP "[wW]";
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+
Copier après la connexion
savent que

'str*'. peut correspondre à st/str/strr/strrr...

?, répété 0 ou 1 fois
select name from 表名 where name regexp '^[^wzs]';
Copier après la connexion

'str?' peut correspondre à st/str+, répété 1 ou plusieurs fois

'str+ 'Peut correspondre à str/strr/strrr/strrr...

Par rapport aux règles régulières en javascript, les règles régulières ici sont des versions simplifiées, là il n'y a pas de correspondance paresseuse/gourmande, et [] n'est pas pris en charge. La syntaxe de wsd ne prend pas en charge le chinois et est relativement simple

.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal