Я пытаюсь сопоставить строки, такие как '[sometext <someothertext>]' (то есть левая квадратная скобка, текст, левая угловая скобка, текст, прямоугольная скобка, прямоугольная скобка) внутри столбца в MYSQL. Первоначально я использовал следующий запрос (обратите внимание, что, поскольку регулярные выражения запросов экранируются дважды в MySql, вы должны использовать два обратных слеша, где вы обычно используете один):mySQL Regexp с квадратными скобками
SELECT * FROM message WHERE msgtext REGEXP '\\[(.+)?<(.+)?>\\]'
Этот запрос не получил никаких ошибок, но он вернулся, что я Бесполезный Не хочу. Вместо (. +) Я хотел [^ \]] (совпадал бы все, кроме прямоугольной скобки). Когда я сменил запрос, у меня появилась следующая ошибка: «Ошибка« повторение операнда оператора повторения »недействительна» из regexp »
После прочтения документации mySQL here в ней указывается символ« Включить литерал », он должен немедленно следуйте открывающей скобе [. " Так как я хочу «^ \]» вместо «]», возможно ли это, так как скобка не может быть первым символом после открытия скобки? Ниже приведены некоторые из запросов, которые я попробовал, которые получают ту же ошибку, перечисленных выше:
SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+?)<([^\\]]+?)>\\]'
SELECT * FROM message WHERE msgtext REGEXP '\\[[^\\]]+?<[^\\]]+?>\\]'
SELECT * FROM message WHERE msgtext REGEXP '\\[[^[.right-square-bracket.]]]+?<[^[.right-square-bracket.]]]+?>\\]'
UPDATE:
Следующий запрос выполняется без ошибок, но не возвращает ни одной строки, даже если я знаю, что есть столбцы которые соответствуют тому, что я ищу (на основе моего исходного запроса в верхней части):
SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+)?<([^\\]]+)?>\\]'