Dans un précédent billet, on a vu comment effectuer une recherche assez poussée en MySQL avec LIKE. Mais LIKE n’est vraiment rien comparée à ce que l’on peut faire avec REGEXP OU RLIKE (RLIKE est un alias pour REGEXP. Il a été créé pour un souci de similitude avec mSQL). Et en même temps, je trouve que LIKE suffit la plupart du temps… REGEXP permet d’utiliser les expressions régulières pour retrouver une chaine de caractères dans une table SQL. Il existe 2 types de regex en PHP (petit nom des expressions régulières ^^) :
- PCRE : issue du langage Perl, ces regex sont réputées difficiles, mais sont rapides et performantes
- POSIX : mise en avant avec le PHP, ces regex se veut un peu plus simple que les PCRE, elles sont néanmoins moins performantes. MySQL utilise ce type de regex.
Sur son tutoriel de PHP, M@téo21 explique le fonctionnement des regex PCRE pour PHP. Si on comprend les PCRE, on comprend les POSIX, donc si vous n’y connaissez rien en regex, je vous conseille de lire son cours à ce sujet, il est particulièrement bien fait : Cours sur les regex de M@téo21.
Utiliser REGEXP
Une fois que l’on maitrise les regex (voir ci-dessous), utiliser REGEXP n’est pas un problème. Un exemple :
SELECT * FROM table WHERE champ REGEXP "<regex>"