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\\.] 表示文本以任意数字或.开始

$文本的结尾

posted @ 2019-10-24 16:48  贾力  阅读(2137)  评论(0编辑  收藏  举报