MySQL正则表达式检索数据

目录

一、使用正则表达式进行基本字符匹配

1.使用regexp关键字

2.使用正则表达式  . 

二、进行OR匹配

1.为搜索两个串之一,使用   |  

2.匹配几个字符之一[]

3.匹配范围

 4.匹配特殊字符


过滤数据允许使用匹配、比较、通配符操作来寻找数据,但是随着过滤条件的复杂性增加,WHERE子句本身的复杂性也有必要增加。

正则表达式就是用来匹配文本的特殊字符串(字符集合)。如果想从一个文本文件中提取出来电话号码就可以使用正则表达式。所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表达式。

一、使用正则表达式进行基本字符匹配

示例:在列phone中寻找包含666的所有行

1.使用regexp关键字

输入:select phone from t_user where phone regexp '666' order by phone;

输出:

 以上例子关键字like被regexp替代,看上去非常像like的语句,但是这个语句告诉mysql:regexp后所跟的东西为正则表达式处理。

2.使用正则表达式 

是正则表达式语言中一个特殊的字符,它表示匹配任意一个字符。

示例:找出表中email列中包含“.com”的行

输入:select email from t_user where email regexp '.com' order by email;

输出:

 注意:MySQL中的正则表达式匹配不区分大小写(即,大写、小写 都匹配)。为区分大小写,可以使用BINARY关键字,如:where name regepx binary 'JanePack'。

二、进行OR匹配

1.为搜索两个串之一,使用   |  

示例:寻找表t_user中phone列包含6 或 8 的列

输入:select phone from t_user where phone regexp '6|8' order by phone;

输出:

| 为正则表达式的OR符号。它表示匹配其中之一,因此6和8都匹配并返回。类似于select语句中的OR语句。

2.匹配几个字符之一[]

如果只想匹配特定的字符,可以通过一组 [和] 括起来的字符来完成。

示例:寻找email列中  .com前是3和q的行

输入:select email from t_user where email regexp '[q3].com' order by phone;

输出:

 []是另一种形式的OR语句。正则表达式[q3].com是[q|3].com的缩写,两个都可以使用。但是后者需要用[]来定义OR语句查找。

3.匹配范围

集合可以用来定义要匹配的一个或多个字符。例如[123456789],为了简化这种类型的集合,可以使用 - 来定义一个范围,比如:[1-9],且匹配范围不一定是数值的,也可以是[a-z]。

示例:在t_user表中寻找id在1-4范围内的name行和email行

输入: select name,email from t_user where id regexp '[1-4]';4]';

输出:

 4.匹配特殊字符

为了匹配特殊字符,必须用 \\ 作为前导。\\-表示查找- ,\\.表示查找 . 。

示例:找出t_user表中email列中有.的name行

输入:select name from t_user where email regexp '\\.' order by name;

输出:

 更多 \\ 来引用的字符:

\\f

换页

\\n换行
\\r回车
\\t制表
\\v纵向制表

注意:为了匹配反斜杠(\)字符本身,需要使用(\\\)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

simpleHan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值