第九章
1.用正则表达式进行搜索:
正则表达式是用来匹配文本特殊的串(字符集合)
输入:SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000' #很像LIKE的语句,除关键字LIKE被REGEXP替代外,它告诉MySQL:REGEXP后所跟的东西为正则表达式处理
ORDER BY prod_name;
输出:prod_name
JetPack 1000
JetPack 2000
这里使用了正则表达式.000。.是正则表达式中的一个特殊字符,它表示匹配任意一个字符。因此1000和2000都匹配且返回了
这里另外说一下MySQL中的三种注释的写法:
1.-- 这种注释后面要加一个空格,后面有一个空格别忘了!!!
2.用#进行注释,例:#DELETE prod_name FROM products
3.用/**/进行注释,例:/*DELETE prod_name FROM products */
LIKE和REGEXP之间有一个重要的差别,请看以下两条语句:
SELECT prod_name
FROM products
WHERE prod_name LIKE '.000'
ORDER BY prod_name;
SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;
/*第一条不返回数据,第二条返回一行,为啥子嘞?
哦,原来是:前面知道了LIKE匹配整个列,如果被匹配的文本在列值中出现,
LIKE将不会找到它,相应的行业不会被返回(除非使用通配符)。
而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这是一个非常重要的差别。
*/
那如何让REGEXP起类似LIKE的作用呢?文末将会会揭晓。
MySQL中的正则表达式匹配不区分大小写,即大写小写都可以匹配,如果要区分大小写可以使用BINARY关键字,如WHERE prod_name REGEXP BINARY 'JetPack .000'
。
2.进行OR匹配
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000' #或者'1000|2000|3000'
ORDER BY prod_name;
输出:prod_name
JetPack 1000
JetPack 2000
匹配几个字符之一:
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;
输出:prod_name
1 ton anvil
2 ton anvil
/*
这里使用了正则表达式[123] Ton。[123]定义一组字符,它的意思是匹配1或2或3,因此,1 ton 和 2 ton都匹配且返回。
[123] Ton是[1|2|3]Ton的缩写,也可以使用后者,但是,必须使用[]来定义OR语句查找什么。
若是写成'1|2|3 Ton'则表示1或2或3 Ton。
*/
同样的,字符合集也可以被否定,在集合的开始出放置一个^ 即可,如[^123]匹配的是出这些字符外得任何东西。
[123456789]可以简写成:[0-9]
[abcd…xyz]可以简写成:[a-z]匹配任意字母字符
3.匹配特殊字符:
为了匹配特殊字符,必须用\\为前导。\\-表示查找-,\\.表示查找.。
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\.'
ORDER BY prod_name;
输出: prod_name
Furball Inc.
\\也用来引用元字符如:\\n表示换行,\\r表示回车等
下图是常见的重复元字符和定位元字符
前面所说如何让REGEXP起类似LIKE的作用,LIKE和REGEXP的不同在于:LIKE匹配整个串而REGEXP匹配子串。 利用定位符,通过^开始每个表达式,用$结束每个表达式,可以使REGEXP的作用和LIKE一样。
小结
学习了正则表达式,学习了如何在MySQL的SELECT语句中通过REGEXP关键字使用他们。