|  |  
 
Une expression régulière (regex) est une méthode puissante de rechercher des valeurs complexes.
 
MySQL utilise l'implémentation de Henry Spencer's. Cela permet d'être compatible avec POSIX 1003.2. MySQL utilise la version étendue.
 
Ce chapitre est une approche très simplifiée. Pour avoir tous les détails, allez sur le manuel d'Henry Spencer regex(7)qui est inclus dans la distribution.   C  Contributions à MySQL. 
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, bonjourcorrespond àbonjouret rien d'autre. 
Les expressions régulières non triviales utilisent certains caractères spéciaux, ce qui leur permet de décrire plusieurs chaînes. Par exemple, l'expression régulière  bonjour|le|mondecorrespond soit àbonjour, soit àleou encore àmonde 
Comme exemple plus complexe, la regexp B[an]*escorrespond àBananes,Baaaaaes,Bes,Banset n'importe quelle
autre chaîne qui commence parB, finit pares, et contient
desaetnentre. 
Une expression régulière peut contenir les caractères spéciaux suivants: 
caractères/explication:
 
^
Le début de la chaîne.
mysql> select "fo\nfo" REGEXP "^fo$";           -> 0
mysql> select "fofo" REGEXP "^fo";              -> 1
$
La fin de la chaîne.
mysql> select "fo\no" REGEXP "^fo\no$";         -> 1
mysql> select "fo\no" REGEXP "^fo$";            -> 0
.
N'importe quel caractère (y compris les nouvelles lignes)
mysql> select "fofo" REGEXP "^f.*";             -> 1
mysql> select "fo\nfo" REGEXP "^f.*";           -> 1
a*
N'importe quel nombre de a(0 ou plus).
mysql> select "Ban" REGEXP "^Ba*n";             -> 1
mysql> select "Baaan" REGEXP "^Ba*n";           -> 1
mysql> select "Bn" REGEXP "^Ba*n";              -> 1
a+
N'importe quel nombre de aexistants (1 ou plus).
mysql> select "Ban" REGEXP "^Ba+n";             -> 1
mysql> select "Bn" REGEXP "^Ba+n";              -> 0
a?
La présence ou l'absence de a(0 ou 1).
mysql> select "Bn" REGEXP "^Ba?n";              -> 1
mysql> select "Ban" REGEXP "^Ba?n";             -> 1
mysql> select "Baan" REGEXP "^Ba?n";            -> 0
de|abc
Alternative : soit de, soitabc.
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)*
N'importe quel nombre de fois la séquence entre parenthèses.
mysql> select "pi" REGEXP "^(pi)+$";            -> 1
mysql> select "pip" REGEXP "^(pi)+$";           -> 0
mysql> select "pipi" REGEXP "^(pi)+$";          -> 1
{1}
{2,3}
Une façon plus générale de quantifier un atome
Pour être plus précis, un atome suivi par une limite, contenant un entiera*
Peut s'écrire a{0,}.a+
Peut s'écrire a{1,}.a?
Peut s'écrire a{0,1}. iet aucune virgule, remplace n'importe quelle séquence deifois l'atome.
Un atome suivi par une limite, contenant un entieriet une virgule, remplace n'importe quelle séquence deifois ou plus l'atome.
Un atome suivi par une limite, contenant un entieriet une virgule et un autre entierj, remplace n'importe quelle séquence deiàj(inclus) fois l'atome.
Les deux arguments doivent être0 >= value <= RE_DUP_MAX (default 255).
Si il y a deux arguments, le second doit être supérieur au premier.[a-dX]
[^a-dX]
Correspond à n'importe quel caractère qui est (ou n'est pas, si ^ est utilisé) soit
a,b,c,dorX. 
Pour inclure le caractère litéral], il doit être placé juste après le crochet ouvrant.
Pour inclure le caractère litéral-character, il doit être en premier ou en dernier.
De cette façon,[0-9]correspond à tous les chiffres.
Tous les autres caractères qui n'ont aucune signification entre[]ne fait que se remplacer lui même.
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
[[.characters.]]
La séquence entre crochés imbriqués sont traités comme une seule élément du crochet père.
Ainsi, pour chl'expressions régulière[[.ch.]]*ccorrespond bien àchchcc.[=character-class=]
Une classe d'équivalence, qui remplace tous les éléments équivalent, y compris lui même.
Par exemple, si oet(+)sont membre d'une classe d'équivalence,
alors[[=o=]],[[=(+)=]], et[o(+)]sont synonymes. Une classe d'équivalence ne peut pas être la fin d'un intervalle.[:character_class:]
Le nom de la classe de caractères entre [:et:]correspond à la liste de tous les caractères de cette classe. Les noms de classes sont :
Ils correspondent aux classes de caractères défini à la page| alnum | digit | punct |  | alpha | graph | space |  | blank | lower | upper |  | cntrl | print | xdigit |  ctype(3)du manuel.
Localement, on peut disposer d'autres classes.
Une classe de caractère ne peut pas être utilisé comme extrémité d'intervalle.
mysql> select "justalnums" REGEXP "[[:alnum:]]+";       -> 1
mysql> select "!!" REGEXP "[[:alnum:]]+";               -> 0
[[:<:]]
[[:>:]]
Ces séquences remplacent la chaîne NULL au début et à la fin d'un mot, respectivement. Un mot est défini comme une séquence de caractères de mot qui ne sont ni suivi ni précédé d'autres caractères de mot. Un caracètre de mot est un caractère alpha numérique (comme défine par ctype(3)) et l'underscore (_).
mysql> select "a word a" REGEXP "[[:<:]]word[[:>:]]";      -> 1
mysql> select "a xword a" REGEXP "[[:<:]]word[[:>:]]";     -> 0
 
mysql> select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1
 |