首页 > 解决方案 > 如何在 MySQL 正则表达式中否定方括号

问题描述

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

[^[]]

MySQL 不执行匹配并在 Message 面板中返回 OK,表示查询尚未执行。

问题:如何在 MySQL 中否定方括号?

编辑:

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

标签: mysqlregexdatabaseregex-negation

解决方案


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]   0

dbfiddle 上的演示

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

dbfiddle 上的演示


推荐阅读