MariaDB 使用正则匹配查询(7)
正则表达式通常被用来检索或替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串.例如从一个文本文件中提取电话号码,查找一篇文章中重复的单词或者替换用户输入的某些敏感词语等,这些地方都可以使用正则表达式,正则表达式强大且灵活,可以应用于非常复杂的查询,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)的更多相关文章
- zendstudio正则匹配查询
Ctrl+H之后,显示的File Search标签页为Containing text. Alt+/ 帮助提示正则匹配的语法. 例子如下: select type from table where id ...
- MySQL全面瓦解8:查询的正则匹配
概述 上一章 查询的过滤条件,我们了解了MySQL可以通过 like % 通配符来进行模糊匹配.同样的,它也支持其他正则表达式的匹配,我们在MySQL中使用 REGEXP 操作符来进行正则表达式匹配. ...
- VS 正则匹配快速查询
**************************************************************************************************** ...
- python_way day18 html-day4, Django路由,(正则匹配页码,包含自开发分页功能), 模板, Model(jDango-ORM) : SQLite,数据库时间字段插入的方法
python_way day18 html-day4 1.Django-路由系统 - 自开发分页功能 2.模板语言:之母板的使用 3.SQLite:model(jDango-ORM) 数据库时间字 ...
- Linux篇---Grep和正则匹配
一.前述 Linux中正则匹配查找比较常用,所以分享一篇关于正则匹配和Grep结合的文章. 二.匹配规则 匹配操作符: \ 转义字符. ...
- php中的正则函数:正则匹配,正则替换,正则分割 所有的操作都不会影响原来的字符串.
有一个长期的误解, 如果要分组, 必须用 小括号 和 |, 而不能用 中括号 和 |. [ab|AB]表示的不是 匹配 ab或 AB, 而是表示 匹配 a,b, |, A, B 这5个字符中 的任意 ...
- mysql学习2:模糊匹配查询like,regexp,in
mysql模糊匹配查询like,regexp,in 摘要 内容比较简单,无摘要. 关键词 模糊查询 like regexp in contact 正文 下图是示例用到的数据表信息 ...
- nginx location 正则匹配
nginx 统计语句1.根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l2.统计访问URL统计PV awk '{print $7 ...
- Jedis运用scan删除正则匹配的key
jedis运用scan删除正则匹配的key 我们都知道用keys *进行查询key的时候会进行堵塞,导致redis整体不可用,而使用scan命令则不会. RedisServiceImpl中sca ...
随机推荐
- spring学习 十二 AspectJ-based的通知入门 带参数的通知
第一步:编写通知类 package com.airplan.pojo; import org.aspectj.lang.ProceedingJoinPoint; public class Advice ...
- Linux/Python学习路线
Linux: 初级阶段: 熟练掌握常用80个命令: 掌握Linux常用软件包的安装方法,如源码安装,rpm安装等: 学习安装设备驱动程序(如网卡,显卡驱动): 了解Grub/Lilo引导程序以及简单的 ...
- 使用小技巧加快IDEA的开发速度
一.live template的使用. 1.live template(自定义模板的载入)打开: Ctrl+shift+A 再在命令行中间输入live template弹出用户自定义的界面.需要自行 ...
- 2018.11.06 bzoj1097: [POI2007]旅游景点atr(最短路+状压dp)
传送门 预处理出不能在每个点停留之后才停留的点的状态. 对kkk个点都跑一次最短路存下来之后只需要简单状压一下就能过了吐槽原题空间64MB蒟蒻无能为力 然后用fillfillfill赋极大值的时候当m ...
- 2018.10.29 bzoj3718: [PA2014]Parking(树状数组)
传送门 显然只用判断两个会相交的车会不会卡住就行了. 直接树状数组维护后缀最大值就行了. 代码: #include<bits/stdc++.h> using namespace std; ...
- boost-数据类型之auto、any、tuple、variant
1.auto.decltype auto是C++11中的关键字,它可以通过类型推导自动得到变量或对象的类型,需要注意的是auto会忽略引用,因为引用其实就代表原对象: #include <v ...
- IntelliJ IDEA 2017版 使用笔记(十二) 其他操作:IDEA 快捷键
其他操作 文件操作: 一.文件操作 新建文件ctrl+shift+n 二.复制当前文件 快捷键:F5 三.移动当前文件 快捷键 :F6 文 ...
- 19) maven 项目结构:聚集
Project Aggregation [,æɡrɪ'ɡeɪʃən] https://maven.apache.org/guides/introduction/introduction-to-the- ...
- 浮点型转整数型进行计算 - 移动GIS设备硬件的原因
在ArcGIS9.1之前桌面版ArcGIS都是采用整数存储的,是为了效率,将浮点型转为整数型存储,但9.2之后随着硬件的提升,浮点型的效率已经得到提高了,所以不再转换.但移动GIS设备还是要转整数型. ...
- bzoj2004(矩阵快速幂,状压DP)
每个长度为p的区间都必须出现k次1,数据又很小,我们使用状压. dp[i][j]->dp[i+1][j'],dp[i][j]表示当前考虑到了第i个车站,包括第i个其后的p个的状态(有车停或没车停 ...