Mysql
 sql >> Base de données >  >> RDS >> Mysql

Limites de mots MySQL REGEXP [[:<:]] [[:>:]] et guillemets doubles

Permettez-moi de citer la documentation d'abord :

À partir de la documentation, nous pouvons voir la raison de votre problème et il n'est pas causé par une fuite. Le problème est que vous essayez de faire correspondre la limite de mot [[:<:]] juste au début de la chaîne qui ne fonctionnera pas car une limite de mot comme vous pouvez le voir dans la documentation sépare un caractère de mot d'un caractère non-mot, mais dans votre cas, le premier caractère est un " qui n'est pas un caractère de mot donc il n'y a pas de limite de mot, il en va de même pour le dernier " et [[:>:]] .

Pour que cela fonctionne, vous devez changer un peu votre expression en celle-ci :

"[[:<:]]word[[:>:]]"
 ^^^^^^^    ^^^^^^^

Remarquez comment la limite de mot sépare un caractère non-mot " à partir d'un mot caractère w au début et un " de d à la fin de la chaîne.

MODIF : Si vous souhaitez toujours utiliser une limite de mot au début et à la fin de la chaîne sans savoir s'il y aura une limite réelle, vous pouvez utiliser l'expression suivante :

([[:<:]]|^)"word"([[:>:]]|$)

Cela correspondra soit à une limite de mot au début, soit au début de la chaîne ^ et de même pour la fin de la limite de mot ou la fin de chaîne. Je vous conseille vraiment d'étudier les données que vous essayez de faire correspondre et de rechercher des modèles communs et de ne pas utiliser d'expressions régulières si elles ne sont pas le bon outil pour le travail.

Démo SQL Fiddle