Informations :
Dates
- Publish : : Sunday 26 june 2022
- 202 views
Share :
J'ai écris cette expression régulière pour rechercher des mots dans ma base de données MySQL.
Cette expression régulière permet de trouver de meilleurs occurrences de mots clefs qu'une recherche écrite de cette manière :
Script avec 1 ligne
001"SELECT * FROM contents WHERE contents_title LIKE '%keyword%'";
MySQL REGEXP
J'utilise la recherche avec REGEXP
à la place de LIKE
.
L'expression régulière est celle-ci :
Script avec 1 ligne
001$expression = "([[:space:]]|^[[:space:]]|[[:punct:]]|^[[:punct:]]|^)".$keyword."([[:space:]]|^[[:space:]]|[[:punct:]]|^[[:punct:]]|$)";
- Un espace
[[:space:]]
devant le mot - ou - pas d'espace
^[[:space:]]
devant le mot - ou - une ponctuation
[[:punct:]]
devant le mot - ou - pas de ponctuation
^[[:punct:]]
devant le mot - ou - commence la chaîne de caractères
^
le mot clé
- Un espace
[[:space:]]
devant le mot - ou - pas d'espace
^[[:space:]]
devant le mot - ou - une ponctuation
[[:punct:]]
devant le mot - ou - pas de ponctuation
^[[:punct:]]
devant le mot - ou - finit la chaîne de caractères
$
Donc, la requête MySQL devient la suivante :
Script avec 1 ligne
001"SELECT * FROM contents WHERE contents_title REGEXP '".$expression."'";
Truc simple ;)
Pour les français par exemple - En faisant une recherche du mot "AR" (Augmented Reality) dans mon moteur de recherche je tombais sur des articles avec les mots "par" ou "arriver" etc.. c'était nul.
C'est mieux maintenant.
Documentation sur REGEXP
- Pattern Matching with Regular Expressions
Les modèles SQL sont susceptibles d'être implémentés par d'autres systèmes de base de données, ils sont donc raisonnablement portables au-delà de MySQL. D'un autre côté, ils sont quelque peu limités. Par exemple, vous pouvez facilement écrire un modèle SQL%abc%
pour rechercher des chaînes contenant abc, mais vous ne pouvez pas écrire un seul modèle SQL pour identifier des chaînes contenant l'un des caractèresa
,b
ouc
. Vous ne pouvez pas non plus faire correspondre le contenu d'une chaîne en fonction de types de caractères tels que des lettres ou des chiffres. Pour de telles opérations, MySQL prend en charge un autre type d'opération de correspondance de modèle basée sur des expressions régulières et l'opérateurREGEXP
(ouNOT REGEXP
pour inverser le sens de la correspondance). La correspondanceREGEXP
utilise un ensemble d'éléments de modèle différent de%
et_
(aucun n'est spécial dans les expressions régulières).