MySQL 8中无效的regexp

时间:2019-05-23 00:52:45

标签: mysql regex mysql-workbench regex-negation

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

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

我有一个具有以下值的记录:

PHPSESSID=b86698ec6da0879\cd5f4;
PHPSESSID=b86698ec6da0879cd;

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

1 个答案:

答案 0 :(得分:0)

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

  1. 某些代码层使用\作为转义字符。因此,\s用于“空格”,而不是s等。然后,反斜杠本身需要转义:\\

  2. 另一层代码需要转义。为了防止\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)