如何否定 MySQL 正则表达式中的方括号

How to negate square brackets in MySQL regex

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

[^[]]

MySQL不执行匹配,消息面板returnsOK,表示查询未执行。

问题:如何取反MySQL中的方括号?

编辑:

我使用 MysQL 服务器 8.0.16 和 MySQL workbench 8.0

在您的查询中使用 NOT

看看这个:

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

这部分查询什么

REGEXP  "[\[\]]"

表示,select 所有包含 [] 的行。

但是,使用 not,实际上你是在说 select 所有不包含 [] 的行;

MySQL5.x 只允许字符 class 中出现 ],如果它是 class 中的 第一个 字符(参见manual)。所以你需要把你的角色 class 重做成 [^][]。例如:

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 抱怨 "unclosed bracket expression")。这种形式的正则表达式在 MySQL 5.7.

中也能正常工作

Demo on dbfiddle