正则表达式通常被用来检索或替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串.例如从一个文本文件中提取电话号码,查找一篇文章中重复的单词或者替换用户输入的某些敏感词语等,这些地方都可以使用正则表达式,正则表达式强大且灵活,可以应用于非常复杂的查询,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. wireshark源码分析 一

    因为手头的项目需要识别应用层协议,于是想到了wireshark,打算在项目中集成wireshark协议分析代码.在官网上下了最新版的wireshark源代码,我的天啊,200多M,这么多代码文件怎么看 ...

  2. [网络]10M、100M、1000M网线的水晶头接法

    在网络维护过程中经常要自己制作网线,水晶头理论上是这样接的: 10M和100M和1000M以太网在使用网线时,对网线各自有不同的要求. 10M和100M在目前来说,连接网络的时候,只用到两对线来传输网 ...

  3. AJAX-URL-HTTP协议-缓存-DOM操作-HTML元素事件

    1.URL 1.URL的作用 用于来表示任意一个资源的位置(互联网上). 协议+主机名+文件目录结构+文件名称 2.详解 格式: <scheme>://<user>:<p ...

  4. input.text文件提示效果

    <div class="search"><input type="text" value="Seach Products" ...

  5. kbmmw 5.01 发布

    Important notes (changes that may break existing code) ============================================= ...

  6. 含参变量积分-Leibniz法则

    定理3,5参考同济下册. 下面的求导-> 三重积分可以化为累次积分经过过2次累次积分后,三重积分对dt的导数形式就等价于定理3了

  7. python的6种基本数据类型--集合

    特征 1.确定性(元素必须可hash) 2.互异性(去重) 3.无序性(集合中的元素没有顺序,先后之分) >>> s = {1,1,1,2,2,3,4,5,6,7} # 创建 > ...

  8. 线性回归,多项式回归(P2)

    回归问题 回归问题包含有线性回归和多项式回归 简单来说,线性回归就是用多元一次方程拟合数据,多项式回归是用多元多次来拟合方程 在几何意义上看,线性回归拟合出的是直线,平面.多项式拟合出来的是曲线,曲面 ...

  9. (转载)Fiddler调式使用知多少(一)深入研究

    原文来源于:http://www.cnblogs.com/tugenhua0707/p/4623317.html,作者:涂根华 !个人觉得原作者写的特别好,故收藏于此 Fiddler调式使用(一)深入 ...

  10. C#重点内容之:事件(Event)

    一.事件的五个组成部分 事件的五个部分: 事件拥有者(对象) 事件成员(Event ,成员) 事件的响应者(对象) 事件处理器(成员,本质是一个回调方法) 事件订阅——把事件处理器与事件关联在一起 二 ...