MySQL之使用正则表达式进行搜索

一、什么是正则表达式

正则表达式是用来匹配文本的字符集合。随着过滤条件复杂性的增加,使用匹配、比较和通配符等方式寻找数据已经不能满足要求。我们则使用正则表达式来匹配。

例如:从一个文本文件中提取电话号码、在一个文本块找到所有重复的单词等。

二、使用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 或者 有 234的值。

被否定的字符集合

例如上面的chasel[1234]改成 chasel[^1234]
在这里插入图片描述

5、匹配范围

集合可用来定义要匹配的一个或多个字符,例如我们要匹配数字集合0到9:
按之前的写法应该是[0123456789],但其实我们是可以使用-来简化这个集合的写法,即写成`[0-9]

  • 范围不限于完整的集合,[2-6]等也是合法的范围。
  • 范围不一定只是数值。[a-z]匹配任意字母字符
    在这里插入图片描述
6、匹配特殊字符

例如我们想匹配特殊字符 .,使用下面表达式是不能达到想要的目的的:
在这里插入图片描述
所以为了匹配特殊字符,在MySQL中必须使用\\作为前导:
在这里插入图片描述

7、匹配字符类

像我们前面自己定义的匹配集合,字符类就是预定义的字符集。如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值