mysql中括号的表达_关于正则表达式:带有方括号的mySQL Regexp

我正在尝试在mysql的列中匹配类似'[sometext'(即,左方括号、文本、左尖括号、文本、右尖括号、右方括号)的字符串。最初我使用了以下查询(注意,由于在MySQL中对regex查询进行了两次转义,所以在通常使用一个反斜杠的地方必须使用两个反斜杠):

SELECT * FROM message WHERE msgtext REGEXP '\\[(.+)?\\]'

这个查询没有收到错误,但它返回了我不想要的东西。我要的不是(.+),而是[^](匹配除右方括号外的所有内容)。更改查询时,出现以下错误:"get error"repetition operator operand invalid"from regexp"

在阅读完mysql文档后,它声明"要包含一个文本]字符,它必须紧跟在左括号["后面,因为我想要"^]"而不是"]",这是不是可能的,因为括号不能是左括号之后的第一个字符?下面是我尝试过的一些查询,它们得到上面列出的相同错误:

SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+?)\\]'

SELECT * FROM message WHERE msgtext REGEXP '\\[[^\\]]+?\\]'

SELECT * FROM message WHERE msgtext REGEXP '\\[[^[.right-square-bracket.]]]+?\\]'

更新:

以下查询运行时没有错误,但不会返回任何行,即使我知道有与我要查找的内容相匹配的列(基于顶部的原始查询):

SELECT * FROM message WHERE msgtext REGEXP '\\[([^\\]]+)?\\]'

这对我很有用:

SELECT '[sometext]' REGEXP '\\[([^[.right-square-bracket.]]+)?\\]$';

最后一个regex看起来是正确的,一旦斜线被取消,它就可以在firefox/js中工作。但看起来MySQL不支持本机捕获组…也许这就是问题所在。

也许这会有用:http://mysqludf.com/lib_mysqludf_preg/

另外,您可以尝试使用*而不是+?为你的否定直角。

*表示0次或更多次重复(贪婪)+?表示1次或多次重复(懒惰)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值