mysql - MySQL 8中无效的regexp

标签 mysql regex mysql-workbench regex-negation

我有此查询应排除一些字符(在方括号内,并以^开头)。所以我的查询是:

select col
from tbl
where col regexp '[^<\\\]*=[^<\\\]*(;|$)';


我有一个具有此值的记录:

PHPSESSID=b86698ec6da0879\cd5f4;
PHPSESSID=b86698ec6da0879cd;


查询返回OK(这表示正则表达式中存在问题。普通查询将返回不包含\或0记录的其他记录。

最佳答案

请尝试使用2个反斜杠和4个(而不是3个)。这是逻辑:


某些代码层使用\作为转义字符。因此,\s用于“空白”,而不是s等。然后,反斜杠本身需要转义:\\
另一层代码需要转义。为了防止\s成为s,反斜杠需要转义,因此为\\s。对于\\,它只知道有两个反斜杠。因此,每个都需要转义:\\\\


例如,我已经看到这种情况发生在PHP和正则表达式中。

向后工作,我希望

[^<\\\]
-->
[^<\]    -- after removing one layer
-->
[^<]     -- after removing the second layer


如果您的3-bs正则表达式没有注意到反斜杠,那么我的分析可能是正确的。

4-bs版本:

[^<\\\\]  -->
[^<\\]    -->
[^<\]     -- (At this point `\` is just another char, as you wanted)

关于mysql - MySQL 8中无效的regexp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56266743/

相关文章:

mysql - 如何在通过 PDO 创建表时将表的排序规则设置为 utf8_persian_ci

php - 如何使用php和mysql获取某个记录的最后插入日期?

Python:在定界符后提取特定数量的字符

regex - 如何在 Emacs 中创建正则表达式来捕获双方括号之间的文本?

mysql - MySQL 中的数据归档

Mysql - 如果表中有重复项,则根据date_created列选择最旧的

regex - 使用脚本提取 Ubuntu 传感器命令

mysql - 与 'reading initial communication packet' 处的 MySQL 服务器失去连接,系统错误 : 61

mysql - 动态sql,如何将查询结果保存到新表中?

mysql - 计算MySql中的多列数