我试图使用MySQL regexp匹配一个不包含方括号的变量名。然而,当我写一些东西时,包括:
[^[]]MySQL不执行匹配,并在消息面板中返回OK,这意味着查询尚未执行。
问题:如何否定MySQL中的方括号?
编辑:
我使用MysQL服务器8.0.16和MySQL工作台8.0
发布于 2019-05-13 05:25:53
MySQL5.x只允许在字符类中使用],如果它是类中的第一个字符(参见手册)。因此,您需要将您的字符类重新工作为[^][]。例如:
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] 0MySQL 8+使用不同的regex引擎(谢@WiktorStribiżew),因此在这种情况下需要将regex修改为[^]\\[] (在没有转义[的情况下,MySQL抱怨“未关闭的括号表达式”)。这种形式的regex在MySQL 5.7中也很好。
发布于 2019-05-13 05:19:41
在查询中使用NOT:
看看这个:
SELECT * FROM test WHERE name NOT REGEXP "[\\[\\]]"这部分查询是什么?
REGEXP "[\\[\\]]"表示,选择包含[和]的所有行。
但是,使用not,实际上您是说选择不包含[或]的所有行;
https://stackoverflow.com/questions/56105462
复制相似问题