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

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)

10-08 13:23