MySQL知识学习——第九天:用正则表达式进行搜索

前言

第九天,继续冲~

今天学习的是利用正则表达式进行搜索,内容有点多,要多试试

正则表达式介绍

正则表达式的内容特别多,这里就只说一些基本概念,知道怎么用就好了。

> 正则表达式是用来匹配文本的特殊的串(字符集合)。

使用MySQL正则表达式

正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。

基本字符匹配

我们针对下面的表(num),第一列的数据类型是字符,第二列的数据类型是数值
在这里插入图片描述

看下面的例子
在这里插入图片描述
这个与昨天我们学习的LIKE语句很像,但是这里我们借用关键字REGEXP(regular expression)来实现正则匹配。

上面的例子说了这么一回事
它告诉MySQL: REGEXP后所跟的东西作为正则表达式(与文字正文1000匹配的一个正则表达式)处理。

注意,所有的正则表达式都应该带引号,(单引号双引号都可以)因为前面说了正则表达式本质是串,可以把它理解成字符串。尽管下面这样运行结果是对的,但是当正则表达式变得复杂了,这种做法就会导致错误,所以,我们在以后写正则表达式的时候一定不能忘记引号。
在这里插入图片描述
再看下面的例子
在这里插入图片描述


在这里插入图片描述
上面两个结果不一样,为什么?我们先说表达式.000,.是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符.也就是说不能为0个字符(有点类似我们之前学的通配符_),所有000不匹配,就不会筛选出来。

再说LIKEREGEXP的区别
在这里插入图片描述
在这里插入图片描述
我们看到结果是不一样的,为什么呢? LIKE匹配的整个列,而REGEXP在列值内匹配,通俗点说,LIKE是完全匹配,REGEXP是部分匹配, 就上面的例子来解释,尽管其他记录里都含有000,但是1000与000是不一样的,说以对LIKE来说不行,必须一模一样才会被LIKE筛选,但是REGEXP不会,它只要验证你的列值里面含有000就可以了,不管你是1000还是000,都会被筛选出来。

还有一点要注意
在这里插入图片描述

最后说一下,正则表达式在检索数据的时候,对列的数据类型没有要求,也就是说不管是字符型或者是数值型都是可以被检索的(上面的例子测试的是数值型,同样的你可以试试字符型,就是把where后面的number列换成new_number),但是当你使用关键字BINARY时,检索的数据列就不能是数值类型了,这一点要格外注意。

进行OR匹配

前面介绍的都是一个串的情形,那么两个串或者多个串可以吗?当然是可以的。

我们一般用|来进行OR匹配,用来搜索两个串之一

在这里插入图片描述
上面的例子意思是匹配含“1000”或“2000”的记录,只要含其中一个就可以了。

类似的可以多个匹配
在这里插入图片描述
更多个也是可以的

匹配几个字符之一

如果我们只想匹配特定字符怎么办?

我们可以借助用[和]括起来的字符来实现
在这里插入图片描述
上面的意思是匹配[123]里面的任意字符,也就是相当于匹配1000或2000或3000.我们可以发现[]是另一种OR语句,[123][1|2|3]的简写。要注意[]是不能省略的,[1|2|3]0001|2|3000是不一样的。后者表示检索含1或2或3000的记录。

字符集合也可以被否定,需要借助^,我们将它放在集合开始就可以实现对集合的否定,看下面的表
在这里插入图片描述
下面的例子就是对字符集合的否定,注意^要放在[]里面,并且放在最开始的地方
在这里插入图片描述
上面的例子就是选择不含1,2,3的记录
再看下面的例子
在这里插入图片描述
为啥这个记录是这样的呢?其实[^123]表示匹配除了值为1,2,3,12,13,23,123以外的记录,比如3000可以,3就不可以。

匹配范围

集合可用来定义要匹配的一个或多个字符,比如说[123]可以写成[1-3],[0-9]表示[0123456789],但是[6-3]是不合法的,后面的值要不小于前面的值,可以等于。
在这里插入图片描述
上面的例子就是匹配[123456]里的任意一个字符。

匹配特殊字符

前面提到了一些特殊字符,他们都有特殊含义,那么怎么匹配他们呢?这时候就需要转义(跟其他语言类似),借助\来实现转义。比如对下面的表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

匹配字符类

为更方便工作,可以使用预定义的字符集,称为字符类( character class)。
在这里插入图片描述
在这里插入图片描述

匹配多个实例

如果我想找至少出现两个1的记录怎么办呢?
在这里插入图片描述
在这里插入图片描述
后面的{2,}表示前面字符出现不少于两次,还有其他选择
在这里插入图片描述

定位符

前面所有的匹配都是匹配的任意位置,如果我要匹配指定位置怎么办?
在这里插入图片描述
我们借助上面元字符来实现
在这里插入图片描述
这个表示检索最后一位是1的记录

在这里插入图片描述
在这里插入图片描述

这节的内容有点多,所以写的比较简略,又不懂的大家可以一起交流,晚安啦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值