我试图在mySQL 的列中匹配'[sometext<someothertext>]' 之类的字符串(即左方括号、文本、左尖括号、文本、右尖括号、右方括号)。最初我使用了以下查询(请注意,由于正则表达式查询在 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.]]]+?>\\]'
更新:
以下查询运行没有错误,但不返回任何行,即使我知道有与我正在寻找的列匹配(基于我在顶部的原始查询):
SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+)?<([^\\]]+)?>\\]'