我正在尝试使用MySQL regexp匹配不包含方括号的变量名。但是,当我写一些东西时,包括:
[^[]]
MySQL不执行匹配,并在“消息”面板中返回“确定”,这表示尚未执行查询。
问题:如何在MySQL中取消方括号?
编辑:
我使用MysQL服务器8.0.16和MySQL工作台8.0
答案 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
MySQL 8+使用不同的正则表达式引擎(感谢@WiktorStribiżew),因此在这种情况下,正则表达式需要修改为[^]\\[]
(没有转义[
,MySQL抱怨“括号未封闭”)表达”)。这种形式的正则表达式在MySQL 5.7中也可以正常工作。
答案 1 :(得分:0)
在查询中使用NOT
看看这个:
SELECT * FROM test WHERE name NOT REGEXP "[\\[\\]]"
这部分查询
REGEXP "[\\[\\]]"
是说,选择包含[
和]
的所有行。
但是,实际上,您说的是选择不包含[
或]
的所有行;