Mysql必知必会笔记(6)正则表达式进行搜索

SELECT 列名1,列名2 FROM 表 WHERE 列名1 REGEXP '1000' ;(包含文本1000的所有的行)

SELECT 列名1,列名2 FROM 表 WHERE 列名1 REGEXP '.000' ;(.表示匹配任意一个字符)

为区分大小写可以使用BINARY关键字 如:WHERE prod_name REGEXP BINARY 'JetPack .000'

like匹配整个值,而REGEXP匹配值中所包含的。

OR匹配

SELECT 列名1,列名2 FROM 表 WHERE 列名1 REGEXP '1000|2000' ;(|为正则表达式的OR操作符)

匹配特定字符之一

SELECT 列名1,列名2 FROM 表 WHERE 列名1 REGEXP '[123] Ton' ;

[123]的意思是匹配1或2或3,也可以写作[1|2|3]

这种形式也可以被否定, [^123]表示匹配除这些字符之外的任何东西。

匹配数字0到9则可以写为[0123456789],可以简化为[0-9] (这种形式也支持字母)

SELECT 列名1,列名2 FROM 表 WHERE 列名1 REGEXP ' [1-5] Ton' ;

匹配特殊字符

需要用 \\作为前导,即转义,为了匹配匹配反斜杠本身,需要使用\\\。

MYSQL要求两个反斜杠,MYSQL自己解释一个,正则表达式库解释另一个。

匹配字符类

匹配多个实例
重复元字符:
例子1:

例子2:匹配任意四位数

定位符:匹配特定位子的文本

比如想找到以一个数开始(包括小数点开始的数)的所有产品,[0-9\\.]或者[[:digit:]\\.]肯定不行,因为它们是在任意位置查找匹配,解决办法是使用^定位符

SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]' ORDER BY prod_name;

在使用^符号时,如果在[ ]里面 表示否定,在外面表示指串的开始处

之前说过LIKE和REGEXP的不同在于LIKE匹配整个串而REGEXP匹配子串,而如果使用^开头,使用$结尾的话,可以使得REGEXP的作用和LIKE一样。

posted @ 2021-04-13 21:14  1ZAYAK1  阅读(68)  评论(0)    收藏  举报