Ric*_*ick 3 regex mysql square-bracket
我试图在mySQL的列中匹配像'[sometext <someothertext>]'(即左方括号,文本,左尖括号,文本,右尖括号,右方括号)之类的字符串.最初我使用了以下查询(请注意,由于regex查询在mySQL中被转义两次,因此必须使用两个反斜杠,通常使用一个反斜杠):
SELECT * FROM message WHERE msgtext REGEXP '\\[(.+)?<(.+)?>\\]'
Run Code Online (Sandbox Code Playgroud)
此查询没有收到任何错误,但它返回了我不想要的内容.而不是(.+),我想要[^ \]](匹配除了右方括号之外的所有内容).当我更改查询时,我收到以下错误:"从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.]]]+?>\\]'
Run Code Online (Sandbox Code Playgroud)
更新:
以下查询运行没有错误,但不返回任何行,即使我知道有匹配我要查找的列(基于我在顶部的原始查询):
SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+)?<([^\\]]+)?>\\]'
Run Code Online (Sandbox Code Playgroud)
这对我有用:
SELECT '[sometext<someothertext>]' REGEXP '\\[([^[.right-square-bracket.]]+)?<([^[.right-square-bracket.]]+)?>\\]$';
Run Code Online (Sandbox Code Playgroud)