我有此查询应排除一些字符(在方括号内,并以^
开头)。所以我的查询是:
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)