MySQL中正则表达式(REGEXP)使用详解


Posted in MySQL onJuly 07, 2022

前言

有时候使用MySQL进行数据库查询数据的时候,like查询存在局限性,这时候就可以使用MySQL中的正则表达式查询的方式。

正则表达式是用来匹配文本的特殊的串(字符集合),将一个模式(正则表达式)与一个文本串进行比较。

  • 从文本文件中提取电话号码
  • 查找名字中间带有数字的文件
  • 文本块中重复出现的单词
  • 替换页面的URL为这些URL的实际链接(一个或两个正则表达式)

LIKE和REGEXP的区别

LIKE匹配整个列(like是模糊查询),如果被匹配的文本仅在列值中出现,LIKE并不会找到它,相应的行也不会返回(当然,使用通配符除外)
REGEXP在列值内进行匹配,如果被匹配的匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列而不是列的子集)

例如:

查询一个表name列含有chen字符串的数据,两条sql语句如下

select * from stu_info where name like '小白';
select * from stu_info where name regexp '小白';

第一条的查询结果是name值等于’小白‘的数据,而第二条的查询结果是name中包含’小白’的数据,也可以用like(模糊查询+通配符)来实现regexp查询结果。

OR进行匹配

select column from table where column regexp 'X|Y' order by column;
select column from table where column regexp '[XY]test' order by column;

第一种写法会将|应用于整个串,只要字符串中有X或Y的数据,都将被检索出来

第二种写法只将[XY]应用于搜索模式的开头处

匹配范围

([])集合可以用来定义要匹配的一个或多个字符,比如[0123456789],为了简化这种类型的集合,可使用(-)来定义一个范围,即[0-9],[a-z]

匹配特殊字符

则表达式由具有特定含义的特殊字符构成;如果要匹配这些特殊字符,就需要用\为前导,这种处理方式就是所谓的转义(escaping),正则表达式内具有特殊意义的所有字符都必须以这种方式转义;(为了匹配反斜杠{}字符本身,需要使用\\)

注意:多数正则表达式实现使用单个反斜杠转义特殊字符,以便能够使用这些字符本身,而MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释一个)

MySQL中正则表达式(REGEXP)使用详解

匹配字符类

有时候需要检索出我们需要的数字、所有字母字符或所有数字字母字符等的匹配,我们可以使用预定义的字符集,称为字符类。

MySQL中正则表达式(REGEXP)使用详解

匹配多个实例

有时候需要对匹配的数目进行更强的控制,比如:寻找所有的数,不管数中包含多少数字,或寻找一个单词并尾随一个s(如果存在)等情况,我们可以利用正则表达式中的重复元字符来完成。

MySQL中正则表达式(REGEXP)使用详解

select column from table where column regexp '\\([0-9] sticks?\\)' order by column;

上面的正则表达式‘\([0-9] sticks?\)’意为:\匹配([0-9]匹配任意数字,这里指匹配的数值范围,sticks?匹配stick和sticks{?使s可选,因为?匹配它前面任何字符的0或者1次出现})。

定位符

有时候为了匹配特定位置的文本,需要使用定位符,常用定位符列表如下:

MySQL中正则表达式(REGEXP)使用详解

找出一个以一个数(包括小数点开始的数)开始的所有数值,简单搜索[0-9\.]或([[:digit:]\.])不行,因为它将在文本内任意位置查找匹配,可以使用^定位符,如下:

select column from table where column regexp '^[0-9\\.]' order by column;

^有两种用法

  • 在集合中(用[和]定义),用它来否定该集合
  • 用来指串的开始处

使regexp和like起相同作用:like匹配整串二regexp匹配子串,可以利用定位符,用^开始每个表达式,用$结束每个表达式,就可以使regexp和like作用一样。

查询admin表中的group字段,数据格式为:1,2,3;4,5,6;1,87,101

例如查询101:

select * from xin_admin where `group` REGEXP '[,|;]?101[,|;]?';

附:Mysql字符串截取 和 截取字符进行查询

一、MySQL中字符串的截取

MySQL中有专门的字符串截取函数:其中常用的有两种:substring_index(str,delim,count) 和concat

1.substring_index(str,delim,count) 函数的使用较为普遍。

函数括号里面的依次为:要分隔截取的字符串(如:”aaa_bbb_ccc”)、分隔符(如:“_”)、位置(表示第几个分隔符处,如:“1”)。

  • count为正数,那么就是从左边开始数,函数返回第count个分隔符的左侧的字符串;
  • count为负数,那么就是从右边开始数,函数返回第count个分隔符右边的所有内容;
  • count可以为0,返回为空。

例子:substring_index("aaa_bbb_ccc","_",1) ,返回为 aaa;
         substring_index("aaa_bbb_ccc","_",2) ,返回为 aaa_bbb;
         substring_index(substring_index("aaa_bbb_ccc","_",-2),"_",1) ,返回为 bbb;

2.concat是连接几个字符串

例子:concat(‘m’,’y’,’s’,’q’,’l’);

返回:mysql

二、依据表中的某个字段查询包含有这个字符的所有数据

1.find_in_set:SELECT * FROM user WHERE find_in_set(‘吴’,name);

查询user表中所有name包含“吴”的数据

2.REGEXP:SELECT * FROM user WHERE name REGEXP ‘(‘吴’|‘刘’)’;

使用正则,查询包含刘或者吴的数据

总结

到此这篇关于MySQL中正则表达式(REGEXP)使用的文章就介绍到这了,更多相关MySQL正则表达式内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

MySQL 相关文章推荐
Mysql服务添加 iptables防火墙策略的方案
Apr 29 MySQL
MySQL时间设置注意事项的深入总结
May 06 MySQL
详细谈谈MYSQL中的COLLATE是什么
Jun 11 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
MySQL创建管理HASH分区
Apr 13 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
Apr 18 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 MySQL
MySQL数据库简介与基本操作
May 30 MySQL
MySQL外键约束(Foreign Key)案例详解
Jun 28 MySQL
MySQL的意向共享锁、意向排它锁和死锁
Jul 15 MySQL
了解MySQL查询语句执行过程(5大组件)
Aug 14 MySQL
MySQL实现字段分割一行转多行的示例代码
MySQL控制流函数(-if ,elseif,else,case...when)
Jul 07 #MySQL
mysql拆分字符串作为查询条件的示例代码
Jul 07 #MySQL
mysql全面解析json/数组
Jul 07 #MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
MySQL外键约束(Foreign Key)案例详解
Jun 28 #MySQL
MySQL主从切换的超详细步骤
Jun 28 #MySQL
You might like
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
深入探究使JavaScript动画流畅的一些方法
2015/06/30 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
东方电视购物:东方CJ
2016/10/12 全球购物
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
个人能力自我鉴赏
2014/01/25 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
2015年信访工作总结
2015/04/07 职场文书
行政司机岗位职责
2015/04/10 职场文书
中标通知书范本
2015/04/17 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
Python爬取某拍短视频
2021/06/11 Python