如何取消MySQL正则表达式中的方括号

时间:2019-05-13 03:35:24

标签: mysql regex database regex-negation

我正在尝试使用MySQL regexp匹配不包含方括号的变量名。但是,当我写一些东西时,包括:

[^[]]

MySQL不执行匹配,并在“消息”面板中返回“确定”,这表示尚未执行查询。

问题:如何在MySQL中取消方括号?

编辑:

我使用MysQL服务器8.0.16和MySQL工作台8.0

2 个答案:

答案 0 :(得分:2)

MySQL5.x仅在字符类中允许](如果它是类中的第一个字符)(请参见manual)。因此,您需要将您的角色类重做为[^][]。例如:

CREATE TABLE vars (varname VARCHAR(20));
INSERT INTO vars VALUES
('hello world'),
('hello [world'),
('hello world]'),
('hello [world]');
SELECT varname, varname RLIKE '^[^][]+$' AS `match`
FROM vars

输出:

varname         match
hello world     1
hello [world    0
hello world]    0
hello [world]   0

Demo on dbfiddle

MySQL 8+使用不同的正则表达式引擎(感谢@WiktorStribiżew),因此在这种情况下,正则表达式需要修改为[^]\\[](没有转义[,MySQL抱怨“括号未封闭”)表达”)。这种形式的正则表达式在MySQL 5.7中也可以正常工作。

Demo on dbfiddle

答案 1 :(得分:0)

在查询中使用NOT

看看这个:

SELECT * FROM test WHERE name NOT REGEXP  "[\\[\\]]"

这部分查询

REGEXP  "[\\[\\]]"

是说,选择包含[]的所有行。

但是,实际上,您说的是选择不包含[]的所有行;