Я пытаюсь сопоставить строки, подобные '[sometext ]' (то есть левая квадратная скобка, текст, левая угловая скобка, текст, правая угловая скобка, правая квадратная скобка) внутри столбца в MySQL. Первоначально я использовал следующий запрос (обратите внимание, что так как запросы регулярных выражений дважды экранируются в mySQL, вы должны использовать две обратные косые черты, где вы обычно используете один):
SELECT * FROM message WHERE msgtext REGEXP '\\[(.+)?<(.+)?>\\]'
Этот запрос не получил ошибок, но он возвратил вещи, которые я не хотел. Вместо (. +) Я хотел [^ \]] (сопоставить все, кроме правой квадратной скобки). Когда я изменил запрос, я получил следующую ошибку: «Ошибка« Оператор повторения недопустим »от regexp»
После прочтения документации по mySQL здесь , в ней говорится: «Чтобы включить буквальный символ], он должен сразу следовать за открывающей скобкой [.» Поскольку я хочу использовать «^ \]» вместо «]», возможно ли это, поскольку скобка не может быть первым символом после открывающей скобки? Ниже приведены некоторые из опрошенных мной запросов, в которых указана та же ошибка, что и выше:
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 '\\[([^\\]]+)?<([^\\]]+)?>\\]'