正则表达式通常被用来检索或替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串.例如从一个文本文件中提取电话号码,查找一篇文章中重复的单词或者替换用户输入的某些敏感词语等,这些地方都可以使用正则表达式,正则表达式强大且灵活,可以应用于非常复杂的查询,MySQL中使用REGEXP关键字指定正则表达式的字符匹配模式,先来看一下下表常用的正则规则吧:

通配符 说明信息 匹配例子
^ 匹配文本的开头字符 '^b'匹配开头是b的字符串
$ 匹配文本的结束字符 'st$'匹配结尾是st的字符
. 匹配任意单个字符 'b.t'匹配任意b和t之间有1个字符
* 匹配0个或多个任意字符 'f*n'匹配字符n前面任意个字符f
+ 匹配前面字符1次或多次 'ba+'匹配以b开头后面紧跟至少1个a
[^] 匹配不在括号中的任何字符 '[^ab]'匹配开头不包括,a或b字幕的
<字符串> 匹配包含指定字符串的文本 'aaa'匹配字符串aaa
[字符集合] 匹配字符集合中任意1个字符 '[xz]'匹配x或者z
字符串{n,} 匹配前面字符至少出现n次 'b{2}'匹配2个或多个b
字符串{n,m} 匹配前面字符至少出现n次不大于m次 'b{2,3}'匹配最少2个,最多3个b

以上就是MariaDB所支持的所有匹配通配符,这里内容虽然较少,但是还是要独立出来一个章节,正则在数据的批量遍历中能起到至关重要的作用,应该认真掌握.

字符(^):匹配以特定字符或者字符串开头的文本

1.在lyshark表中,查询Name字段以字母b开头的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP '^b';

+-----+-----+------------+-------+
| Uid | Gid | Name | Price |
+-----+-----+------------+-------+
| b1 | 101 | blackberry | 10.20 |
| b2 | 104 | berry | 7.60 |
| t1 | 102 | bannana | 10.30 |
+-----+-----+------------+-------+
3 rows in set (0.01 sec)

2.在lyshark表中,查询Name字段以字母be开头的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP '^be';

+-----+-----+-------+-------+
| Uid | Gid | Name | Price |
+-----+-----+-------+-------+
| b2 | 104 | berry | 7.60 |
+-----+-----+-------+-------+
1 row in set (0.00 sec)

字符($):匹配以特定字符或者字符串结尾的文本

1.在lyshark表中,查询Name字段以字母y结尾的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'y$';

+-----+-----+------------+-------+
| Uid | Gid | Name | Price |
+-----+-----+------------+-------+
| b1 | 101 | blackberry | 10.20 |
| b2 | 104 | berry | 7.60 |
| c0 | 101 | cherry | 3.20 |
| m2 | 105 | xbabay | 2.60 |
+-----+-----+------------+-------+
4 rows in set (0.00 sec)

2.在lyshark表中,查询Name字段以字母bay结尾的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'bay$';

+-----+-----+--------+-------+
| Uid | Gid | Name | Price |
+-----+-----+--------+-------+
| m2 | 105 | xbabay | 2.60 |
+-----+-----+--------+-------+
1 row in set (0.00 sec)

字符(.):匹配任意一个字符

1.在lyshark表中,查询Name字段值包含字母a与g且两个字母之间只有一个字母的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'a.g';

+-----+-----+--------+-------+
| Uid | Gid | Name | Price |
+-----+-----+--------+-------+
| bs1 | 102 | orange | 11.20 |
| m1 | 106 | mango | 15.70 |
+-----+-----+--------+-------+
2 rows in set (0.00 sec)

字符(*):匹配前面的字符任意多次,包括0次

1.在lyshark表中,查询Name字段以字母b开头并且b后面出现字母a的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP '^ba*';

+-----+-----+------------+-------+
| Uid | Gid | Name | Price |
+-----+-----+------------+-------+
| b1 | 101 | blackberry | 10.20 |
| b2 | 104 | berry | 7.60 |
| t1 | 102 | bannana | 10.30 |
+-----+-----+------------+-------+
3 rows in set (0.00 sec)

字符(+):匹配前面的字符至少一次

1.在lyshark表中,查询Name字段以字母b开头,且b后面出现字母a至少一次的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP '^ba+';

+-----+-----+---------+-------+
| Uid | Gid | Name | Price |
+-----+-----+---------+-------+
| t1 | 102 | bannana | 10.30 |
+-----+-----+---------+-------+
1 row in set (0.00 sec)

字符(|):匹配指定字符

1.在lyshark表中,查询Name字段包括字符串on的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'on';

+-----+-----+---------+-------+
| Uid | Gid | Name | Price |
+-----+-----+---------+-------+
| bs2 | 105 | melon | 8.20 |
| l2 | 104 | lemon | 6.40 |
| o2 | 103 | coconut | 9.20 |
+-----+-----+---------+-------+
3 rows in set (0.00 sec)

2.在lyshark表中,查询Name字段包括字符串on或者ap的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'on|ap';

+-----+-----+---------+-------+
| Uid | Gid | Name | Price |
+-----+-----+---------+-------+
| a1 | 101 | apple | 5.20 |
| a2 | 103 | apricot | 2.20 |
| bs2 | 105 | melon | 8.20 |
| l2 | 104 | lemon | 6.40 |
| o2 | 103 | coconut | 9.20 |
| t2 | 102 | grape | 5.30 |
+-----+-----+---------+-------+
6 rows in set (0.00 sec)

3.在lyshark表中,查询Name字段使用LIKE关键字匹配on的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name LIKE 'on';
Empty set (0.00 sec) #结果匹配不到,这也是这两个匹配方法的不同之处.

字符([]):匹配指定字符中任意一个

1.在lyshark表中,查询Name字段包含字母o或者t的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP '[ot]';

+-----+-----+---------+-------+
| Uid | Gid | Name | Price |
+-----+-----+---------+-------+
| a2 | 103 | apricot | 2.20 |
| bs1 | 102 | orange | 11.20 |
| bs2 | 105 | melon | 8.20 |
| l2 | 104 | lemon | 6.40 |
| m1 | 106 | mango | 15.70 |
| m3 | 105 | xxtt | 11.60 |
| o2 | 103 | coconut | 9.20 |
+-----+-----+---------+-------+
7 rows in set (0.01 sec)

字符([^字符集]):匹配不在指定集合中的任何字符

1.在lyshark表中,查询Uid字段包含字母a-e和1-2以外字符的集合,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Uid REGEXP '[^a-e1-2]';

+---------+-----+----------+--------+
| Uid | Gid | Name | Price |
+---------+-----+----------+--------+
| b5 | 107 | xxxx | 3.60 |
| bs1 | 102 | orange | 11.20 |
| bs2 | 105 | melon | 8.20 |
| c0 | 101 | cherry | 3.20 |
| l2 | 104 | lemon | 6.40 |
| lyshark | 999 | lysharks | 999.00 |
| m1 | 106 | mango | 15.70 |
| m2 | 105 | xbabay | 2.60 |
| m3 | 105 | xxtt | 11.60 |
| o2 | 103 | coconut | 9.20 |
| t1 | 102 | bannana | 10.30 |
| t2 | 102 | grape | 5.30 |
| t4 | 107 | xbababa | 3.60 |
+---------+-----+----------+--------+
13 rows in set (0.00 sec)

字符({n,}):匹配前一个字符至少匹配n次的

1.在lyshark表中,查询Name字段,匹配x字符至少出现2次的行,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'x{2,}';

+-----+-----+------+-------+
| Uid | Gid | Name | Price |
+-----+-----+------+-------+
| b5 | 107 | xxxx | 3.60 |
| m3 | 105 | xxtt | 11.60 |
+-----+-----+------+-------+
2 rows in set (0.00 sec)

字符({n,m}):匹配前一个字符至少匹配n次,且不大于m次的记录

1.在lyshark表中,查询Name字段,匹配ba字符至少出现2次且不大于3次的记录,SQL语句如下:

MariaDB [lyshark]> select * from lyshark where Name REGEXP 'ba{1,3}';

+-----+-----+---------+-------+
| Uid | Gid | Name | Price |
+-----+-----+---------+-------+
| m2 | 105 | xbabay | 2.60 |
| t1 | 102 | bannana | 10.30 |
| t4 | 107 | xbababa | 3.60 |
+-----+-----+---------+-------+
3 rows in set (0.00 sec)

参考文献:mysql5.7从入门到精通

MariaDB 使用正则匹配查询(7)的更多相关文章

  1. zendstudio正则匹配查询

    Ctrl+H之后,显示的File Search标签页为Containing text. Alt+/ 帮助提示正则匹配的语法. 例子如下: select type from table where id ...

  2. MySQL全面瓦解8:查询的正则匹配

    概述 上一章 查询的过滤条件,我们了解了MySQL可以通过 like % 通配符来进行模糊匹配.同样的,它也支持其他正则表达式的匹配,我们在MySQL中使用 REGEXP 操作符来进行正则表达式匹配. ...

  3. VS 正则匹配快速查询

    **************************************************************************************************** ...

  4. python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法

    python_way day18 html-day4 1.Django-路由系统   - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...

  5. Linux篇---Grep和正则匹配

    一.前述 Linux中正则匹配查找比较常用,所以分享一篇关于正则匹配和Grep结合的文章. 二.匹配规则 匹配操作符: \                  转义字符.                 ...

  6. php中的正则函数:正则匹配,正则替换,正则分割 所有的操作都不会影响原来的字符串.

    有一个长期的误解, 如果要分组, 必须用 小括号 和 |, 而不能用 中括号 和 |. [ab|AB]表示的不是 匹配 ab或 AB, 而是表示 匹配 a,b, |, A, B 这5个字符中 的任意 ...

  7. mysql学习2:模糊匹配查询like,regexp,in

    mysql模糊匹配查询like,regexp,in   摘要 内容比较简单,无摘要.   关键词 模糊查询  like  regexp  in  contact   正文 下图是示例用到的数据表信息 ...

  8. nginx location 正则匹配

    nginx 统计语句1.根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l2.统计访问URL统计PV awk '{print $7 ...

  9. Jedis运用scan删除正则匹配的key

    jedis运用scan删除正则匹配的key  我们都知道用keys *进行查询key的时候会进行堵塞,导致redis整体不可用,而使用scan命令则不会.   RedisServiceImpl中sca ...

随机推荐

  1. java 中jar的使用

    ????????????这里不会 需要学习

  2. Mac 更换桌面背景崩溃(闪退)

    更新完系统后就会出现这种情况,,其实就是用户偏好文件出了问题. 1. 在终端输入 cd /Users/YourUserName/Library/Preferences //进入文件夹 rm com.a ...

  3. OpenCV+VisualStudion2017配置

    1.创建工程 Ctrl+Shift+n 2.创建.cpp文件 Ctrl+Shift+a 3.打开属性管理器 视图->其他窗口->属性管理器 Debug64右键 属性 4.添加包含目录 VC ...

  4. 3.The significance of Books 书本的意义

    3.The significance of Books 书本的意义 (1)A bookless life is an imcomplete life.Books influence the depth ...

  5. Linux未安装上传下载的插件,怎么进行文件的上传下载

    首先连上服务: 然后Alt+p,打开SFTp窗口: 例如,我们今天要往tomcat的webappmu目录下上传一个文件: 先pwd,查看我们Linux上所处的目录:pwd 然后进入到tomcat的we ...

  6. Linux系统各发行版镜像下载(借阅)

    Linux各个版本资源下载 Linux系统各发行版镜像下载(持续更新) == Linux系统各发行版镜像下载(2014年10月更新),如果直接下载不了,请使用迅雷下载.并且注意,我的下载地址,在  迅 ...

  7. UVaLive 3641 Leonardo's Notebook (置换)

    题意:给定一个置换 B 问是否则存在一个置换 A ,使用 A^2 = B. 析:可以自己画一画,假设 A = (a1, a2, a3)(b1, b2, b3, b4),那么 A^2 = (a1, a2 ...

  8. ckeditor 实现ctrl+v粘贴图片并上传、word粘贴带图片

    公司做的项目需要用到文本上传功能. Chrome+IE默认支持粘贴剪切板中的图片,但是我要粘贴的文章存在word里面,图片多达数十张,我总不能一张一张复制吧? 我希望打开文档doc直接复制粘贴到富文本 ...

  9. 配置React的Babel 6和Webpack 2环境

    Facebook的一帮子工程师在忙碌之余开发除了一套前段UI框架React.这个框架最大的有点就在于让UI的开发都基于组件,这样View都是根据props和state变化的. 项目地址:https:/ ...

  10. 老树新芽,在ES6下使用Express

    要让Express在ES6下跑起来就不得不用转码器Babel了.首先新建一个在某目录下新建一个项目.然后跳转到这个目录下开始下面的操作. 简单走起 安装babel-cli $ npm install ...