J'essaie de faire correspondre des chaînes comme '[sometext <someothertext>]' (c'est-à-dire, crochet gauche, texte, angle gauche, texte, équerre, droite) dans une colonne mySQL. A l'origine je la requête suivante (notez que depuis les requêtes regex sont échappés deux fois dans mySQL, vous devez utiliser deux barres obliques où vous utilisez normalement un):mySQL Regexp avec des crochets
SELECT * FROM message WHERE msgtext REGEXP '\\[(.+)?<(.+)?>\\]'
Cette requête n'a reçu aucune erreur, mais il est revenu que je DIDN Je ne veux pas. Au lieu de (. +), Je voulais [^ \]] (faire correspondre tout sauf un crochet carré droit). Lorsque j'ai changé la requête, j'ai eu l'erreur suivante: "Got error 'répétition-opérateur opérande invalide' de regexp"
Après avoir lu la documentation mySQL here, il indique "Pour inclure un caractère littéral], il doit immédiatement suivez le crochet d'ouverture [. " Puisque je veux "^ \]" au lieu de "]", est-ce encore possible puisque le support ne peut pas être le premier caractère après le crochet d'ouverture? Voici quelques-unes des questions que j'ai essayé qui obtiennent la même erreur ci-dessus:
SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+?)<([^\\]]+?)>\\]'
SELECT * FROM message WHERE msgtext REGEXP '\\[[^\\]]+?<[^\\]]+?>\\]'
SELECT * FROM message WHERE msgtext REGEXP '\\[[^[.right-square-bracket.]]]+?<[^[.right-square-bracket.]]]+?>\\]'
MISE À JOUR:
La requête suivante fonctionne sans erreurs, mais ne renvoie aucune ligne même si je sais qu'il ya des colonnes qui correspondent à ce que je recherche (basé sur ma requête initiale en haut):
SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+)?<([^\\]]+)?>\\]'