第九章

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表示回车等

下图是常见的重复元字符和定位元字符

mysql 的关键字转demong 的关键字_正则表达式


前面所说如何让REGEXP起类似LIKE的作用,LIKE和REGEXP的不同在于:LIKE匹配整个串而REGEXP匹配子串。 利用定位符,通过^开始每个表达式,用$结束每个表达式,可以使REGEXP的作用和LIKE一样。

小结

学习了正则表达式,学习了如何在MySQL的SELECT语句中通过REGEXP关键字使用他们。