MySQL:where子句 使用正则表达式
用到的表参考https://www.cnblogs.com/july23333/p/11763375.html
where子句使用正则表达式用关键字REGEXP
1、匹配基本字符
eg1: select prod_name from products where prod_name regexp '1000';
看上去很像like语句的作用,但是like '1000'可不会返回上面的结果,like '%1000'才可以。
like匹配的是整个列,regexp匹配列值内的文本。
eg2: select prod_name from products where prod_name regexp '.000';
正则表达式中的'.'可以匹配任一字符。
2、OR匹配 '|'实现
eg: select prod_name from products where prod_name regexp '1000|2000';
3、匹配几个字符之一
eg: select prod_name from products where prod_name regexp '[123] ton';
[123]等效于[1|2|3],需要把OR的字符括起来,否则‘1|2|3 ton’会被MySQL理解为1或2或3 ton。
[^123]前面加^表示取反。
4、匹配范围
[1-5] [a-z]等
5、匹配特殊字符
eg: select prod_name from products where prod_name regexp '.'; 将搜索出所有行,而我们只想要含有‘.’的怎么做?
转义:select prod_name from products where prod_name regexp '\\.';
正则表达式具有特殊意义的字符都这样转义。
为了匹配 '\' 要使用 ‘\\’;一般正则表达式实现使用单个反斜杠 \ 转义特殊字符,就能这些字符本身,但是MySQL需要两个 \\,正则表达式解释一个,MySQL用一个。
6、匹配字符类
预定义的字符集如下:
eg: select prod_name from products where prod_name regexp '[:alnum:]';
7、匹配多个实例
常用正则表达式重复元字符:
注意:这些重复元字符都是规定其前面出现的字符或表达式的,如[0-9]{5}匹配连在一起任意5个数字
8、定位符
^文本的开始(只有在集合[]中才表示否定集合) ^[0-9\\.] 表示文本以任意数字或.开始
$文本的结尾