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一样。

浙公网安备 33010602011771号