一、什么是正则表达式
正则表达式是用来匹配文本的字符集合。随着过滤条件复杂性的增加,使用匹配、比较和通配符等方式寻找数据已经不能满足要求。我们则使用正则表达式来匹配。
例如:从一个文本文件中提取电话号码、在一个文本块找到所有重复的单词等。
二、使用MySQL正则表达式
MySQL用WHERE
子句对正则表达式提供了初步的支持,允许指定正则表达式过滤select
检索出的数据。
(注:MySQL仅支持正则表达式里的一个子集)
1、基本字符匹配
这条语句与LIKE
语句的模糊查询非常相似,它通过REGEXP
告诉MySQL:REGEXP
后所跟的东西作为正则表达式处理。
其中 .
是正则表达式当中的一个特殊的字符,它表示匹配任意一个字符。这也可以通过LIKE
与通配符达到相似效果。
2、REGEXP与LIKE的区别
LIKE在上面的用法里只能用来匹配整个列值,而REGEXP匹配列值里含有sel即可返回。
REGEXP怎么匹配整个列值?
通过^和$定位符来匹配整个列值:
^
文本的开始$
文本的结束
3、进行OR匹配
使用 |
,搜索两个字符集合或者多个字符集合之一
4、匹配几个字符之一
当只想匹配特定的单一字符,可通过指定一组用[]括起来的字符来完成。
其相当于chasel[1|2|3|4]
的缩写。
|容易误解的实例:
这种写法并不能达到上面例子的chasel[1234]的效果,因为这种写法代表的是匹配列值里有 chasel1
或者 有 2
、3
、 4
的值。
被否定的字符集合
例如上面的chasel[1234]改成 chasel[^1234]
5、匹配范围
集合可用来定义要匹配的一个或多个字符,例如我们要匹配数字集合0到9:
按之前的写法应该是[0123456789]
,但其实我们是可以使用-来简化这个集合的写法,即写成`[0-9]
- 范围不限于完整的集合,[2-6]等也是合法的范围。
- 范围不一定只是数值。[a-z]匹配任意字母字符
6、匹配特殊字符
例如我们想匹配特殊字符 .
,使用下面表达式是不能达到想要的目的的:
所以为了匹配特殊字符,在MySQL中必须使用\\
作为前导:
7、匹配字符类
像我们前面自己定义的匹配集合,字符类就是预定义的字符集。如下: