MySQL中的模式匹配分为两种:
一种是标准SQL匹配,另一种是 正则表达式匹配
标准SQL匹配,我们通常用的最多的一种方式
a:使用LIKE和NOT LIKE比较操作符(注意不能使用=或!=);
b:模式默认是忽略大小写的;
c:允许使用”_”匹配任何单个字符,”%”匹配任意数目字符(包括零字符);
正则表达式匹配。用的极少,极其影响性能
a:使用REGEXP和NOT REGEXP操作符
b:标准SQL匹配即LIKE,使用的是完全匹配,REGEXP使用的是部分匹配。
所谓完全匹配就是只有被匹配字符完全和所定义的模式匹配,才匹配成功,而部分匹配是只要被匹配字符包含或者可以等于所定义的模式,就匹 配成功。
正则表达式匹配示例
^ 所匹配的字符串以后面的字符串开头
mysql> select "fonfo" REGEXP "^fo$"; -> 0(表示不匹配)
mysql> select "fofo" REGEXP "^fo"; -> 1(表示匹配)
$ 所匹配的字符串以前面的字符串结尾
mysql> select "fono" REGEXP "^fono$"; -> 1(表示匹配)
mysql> select "fono" REGEXP "^fo$"; -> 0(表示不匹配)
. 匹配任何字符(包括新行)
mysql> select "fofo" REGEXP "^f.*"; -> 1(表示匹配)
mysql> select "fonfo" REGEXP "^f.*"; -> 1(表示匹配)
a* 匹配任意多个a(包括空串)
mysql> select "Ban" REGEXP "^Ba*n"; -> 1(表示匹配)
mysql> select "Baaan" REGEXP "^Ba*n"; -> 1(表示匹配)
mysql> select "Bn" REGEXP "^Ba*n"; -> 1(表示匹配)
a+ 匹配1个或多个a字符的任何序列。
mysql> select "Ban" REGEXP "^Ba+n"; -> 1(表示匹配)
mysql> select "Bn" REGEXP "^Ba+n"; -> 0(表示不匹配)
a? 匹配一个或零个a
mysql> select "Bn" REGEXP "^Ba?n"; -> 1(表示匹配)
mysql> select "Ban" REGEXP "^Ba?n"; -> 1(表示匹配)
mysql> select "Baan" REGEXP "^Ba?n"; -> 0(表示不匹配)
de|abc 匹配de或abc
mysql> select "pi" REGEXP "pi|apa"; -> 1(表示匹配)
mysql> select "axe" REGEXP "pi|apa"; -> 0(表示不匹配)
mysql> select "apa" REGEXP "pi|apa"; -> 1(表示匹配)
mysql> select "apa" REGEXP "^(pi|apa)$"; -> 1(表示匹配)
mysql> select "pi" REGEXP "^(pi|apa)$"; -> 1(表示匹配)
mysql> select "pix" REGEXP "^(pi|apa)$"; -> 0(表示不匹配)
(abc)* 匹配任意多个abc(包括空串)
mysql> select "pi" REGEXP "^(pi)*$"; -> 1(表示匹配)
mysql> select "pip" REGEXP "^(pi)*$"; -> 0(表示不匹配)
mysql> select "pipi" REGEXP "^(pi)*$"; -> 1(表示匹配)
{1} {2,3} 这是一个更全面的方法,它可以实现前面好几种保留字的功能
a* 可以写成a{0,}
a 可以写成a{1,}
a? 可以写成a{0,1}
在{}内只有一个整型参数i,表示字符只能出现i次;在{}内有一个整型参数i, 后面跟一个“,”,表示字符可以出现i次或i次以上;在{}内只有一个整型参数i, 后面跟一个“,”,再跟一个整型参数j,表示字符只能出现i次以上,j次以下(包括i次和j次)。其中的整型参数必须大于等于0,小于等于 RE_DUP_MAX(默认是255)。 如果同时给定了m和n,m必须小于或等于n.
注意 匹配特殊字符
\\ 为前导。即转义.正则表达式内具有特殊意义的所有字符都必须以这种方式转义。
\\- 表示查找 -
\\. 表示查找 .