Maison >base de données >tutoriel mysql >Discussion détaillée sur la correspondance de modèles MYSQL avec REGEXP et le partage d'utilisation du code
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 | +--------+--------+---------+------+------------+------------+
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 | +--------+--------+---------+------+------------+-------+
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 | +----------+-------+---------+------+------------+------------+
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 | +-------+--------+---------+------+------------+-------+
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 | +--------+--------+---------+------+------------+------------+
[^……], 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 | +--------+--------+---------+------+------------+-------+
*, répété 0 fois ou plus Les étudiants qui connaissent
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 | +----------+-------+---------+------+------------+------------+savent que
'str*'. peut correspondre à st/str/strr/strrr...
?, répété 0 ou 1 foisselect name from 表名 where name regexp '^[^wzs]';
'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!