中文标点无统一的编码范围,您可以在搜索引擎上搜索
中文标点符号
Unicode码
,然后结合运算符来逐个排除。
例如句号(。)对应正则表达式为[\\x{3002}]。执行select * from values ('你好。'),('nihao!') t(d) where d rlike '[\\x{3002}]';返回结果为你好。。
说明
如果要匹配单引号,可以用unicode0027
,对应正则表达式为
[\\x{0027}]。
由于系统采用反斜线
\
作为转义符,因此正则表达式的模式中出现的
\
都要进行二次转义。例如正则表达式要匹配字符串
a+b
。其中
+
是正则中的一个特殊字符,因此要用转义的方式表达,在正则引擎中的表达方式是
a\\+b
。由于系统还要解释一层转义,因此能够匹配该字符串的表达式是
a\\\+b
。
示例如下。
select 'a+b' rlike 'a\\\+b';
+
极端的情况,如果要匹配字符
\
, 由于在正则引擎中
\
是一个特殊字符,因此要表示为
\\
,而系统还要对表达式进行一次转义,因此写成
\\\\
。
select 'a\\b', 'a\\b' rlike 'a\\\b';
+
select 'a\\b', 'a\\b' rlike 'a\\\\b';
说明 在MySQL中写
a\\b
,而在输出结果中显示
a\b
,同样是因为MySQL会对表达式进行转义。
如果字符串中有制表符TAB,系统在读入
\t
这两个字符时,已经将其存为一个字符,因此在正则的模式中它也是一个普通的字符。
select 'a\tb', 'a\tb' rlike 'a\tb';
+