Annexe F Expressions régulières MySQL

Une expression régulière (regex) est la meilleure méthode pour spécifier une recherche complexe.

MySQL utilise l'implémentation de Henry Spencer des expressions régulières qui tend à être conforme à POSIX 1003.2. MySQL en utilise la version étendue. See Annexe B, Crédits. MySQL la version améliorée pour supporter les expressions régulières effectuées avec REGEXP dans les commandes SQL. See Section 3.3.4.7, « Recherche de modèles ».

Ceci est une référence simplifiée qui n'aborde pas les détails. Pour avoir plus d'informations, reportez-vous à la page de manuel regex(7) de Henry Spencer. Ce manuel est inclus dans la distribution MySQL, dans le fichier regex.7 du dossier regex.

Une expression régulière décrit un jeu de chaînes de caractères. La plus simple est celle qui ne comporte pas de caractères spéciaux. Par exemple, l'expression régulière bonjour trouvera bonjour et rien d'autre.

Les expression régulières non-triviales utilisent des constructions spéciales pour pouvoir trouver plus d'une chaîne. Par exemple, l'expression régulière bonjour|monde trouve la chaîne bonjour ou la chaîne monde.

Voici un exemple encore plus complexe : l'expression régulière B[an]*s trouve l'une des chaînes suivantes Bananas, Baaaaas, Bs, et n'importe quelle autre chaîne commen¸ant par un B, se terminant par un s, et contenant n'importe quel nombre de a et de n au milieu.

Une expression régulière peut utiliser l'un des caractères spéciaux ou constructions suivants :

Pour utiliser une instance littérale d'un caractère spécial dans une expression régulière, vous devez la faire précéder de deux caractères anti-slash. L'analyseur MySQL interpréte le premier anti-slash, et la bibliothèque d'expressions régulières utilisera le second. Par exemple, pour rechercher l'expression 1+2 qui contient le caractère spécial +, seule la dernière expression régulière sera correcte :

mysql> SELECT '1+2' REGEXP '1+2';                       -> 0
mysql> SELECT '1+2' REGEXP '1\+2';                      -> 0
mysql> SELECT '1+2' REGEXP '1\\+2';                     -> 1