mysql - 如何在 MySQL 正则表达式中否定方括号
问题描述
我正在尝试使用 MySQL regexp 匹配不包含方括号的变量名。然而,当我写的东西包括:
[^[]]
MySQL 不执行匹配并在 Message 面板中返回 OK,表示查询尚未执行。
问题:如何在 MySQL 中否定方括号?
编辑:
我使用 MySQL 服务器 8.0.16 和 MySQL 工作台 8.0
解决方案
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
MySQL 8+ 使用不同的正则表达式引擎(感谢@WiktorStribiżew),因此在这种情况下需要修改正则表达式[^]\\[]
(不转义[
,MySQL 抱怨“未闭合的括号表达式”)。这种形式的正则表达式在 MySQL 5.7 中也可以正常工作。
推荐阅读
- javascript - 如何在循环内显示数组元素
- java - 通过 spring-data-jdbc Resultset.TYPE_FORWARD_ONLY READ_ONLY 流式传输非常大的表
- javascript - 可放置两次触发的jQuery UI放置事件
- javascript - 由于 mouseup 事件,模态消失(在模态中突出显示输入字段并在模态外释放鼠标)
- r - ComplexHeatMap - 在基础数据集中按顺序列对行进行排序,但在最终热图中不显示顺序列
- wso2 - 使用 Facebook 的 SSO
- oauth-2.0 - Vimeo API 访问令牌到期
- javascript - 如何修复下拉菜单在 Firefox 量子中不起作用
- python - Using multiprocessing pool in Python
- java - 在代码中为 ScenarioOutline 创建示例