mysql正则表达式简单
正则表达式是用某种模式去匹配某个字符串的一个方式。mysql使用正则表达式的基本形式如下:
属性名 regexp '匹配方式';
当然,上述语句的前面一般是一个select 语句。以下例子以下面两个表为例.
mysql> select * from department;
+------+-----------+--------------+-------------+
| d_id | d_name | function_ | address |
+------+-----------+--------------+-------------+
| 1001 | 科研部 | 研发产品 | 3号楼5层 |
| 1002 | 生产部 | 生产产品 | 5号楼1层 |
| 1003 | 销售部 | 策划销售 | 5号楼1层 |
+------+-----------+--------------+-------------+
3 rows in set (0.00 sec)mysql> select * from employee;
+-----+------+-----------+------+------+-----------------------------------------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+-----------+------+------+-----------------------------------------+
| 1 | 1001 | 张三 | 26 | 男 | 北京市海淀区 |
| 2 | 1001 | 李四 | 24 | 女 | 北京市昌平区 |
| 3 | 1002 | 王五 | 25 | 男 | 湖南省长沙市 |
| 4 | 1004 | Aric | 15 | 男 | England |
| 5 | 1005 | John | 54 | 男 | gongzhufen of haidian strict of beijing |
| 6 | 1006 | 赵天才 | 40 | 男 | 广东省广州市西华里街道 |
+-----+------+-----------+------+------+-----------------------------------------+
6 rows in set (0.00 sec)
1.匹配字符串的开始部分,模式 '^'. (模式,就是匹配方式)
查询department表中字段address以3开头的记录,如下:
mysql> select * from department where address-> regexp '^3';
+------+-----------+--------------+-------------+
| d_id | d_name | function_ | address |
+------+-----------+--------------+-------------+
| 1001 | 科研部 | 研发产品 | 3号楼5层 |
+------+-----------+--------------+-------------+
1 row in set (0.00 sec)
查询department表中address字段以2开头的字段,如下:
mysql> select * from department where address regexp '^2';
Empty set (0.00 sec)
查询employee表中homeaddr字段以北京市开头的字段,如下:
mysql> select * from employee where homeaddr -> regexp '^北京市';
+-----+------+--------+------+------+--------------------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+--------+------+------+--------------------+
| 1 | 1001 | 张三 | 26 | 男 | 北京市海淀区 |
| 2 | 1001 | 李四 | 24 | 女 | 北京市昌平区 |
+-----+------+--------+------+------+--------------------+
2 rows in set (0.00 sec)
注意:不轮匹配什么样类型的字段,必须有'^ '
例如,查询employee中age字段以5开头的记录,如下:
mysql> select * from employee where -> age regexp '^5';
+-----+------+------+------+------+-----------------------------------------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+------+------+------+-----------------------------------------+
| 5 | 1005 | John | 54 | 男 | gongzhufen of haidian strict of beijing |
+-----+------+------+------+------+-----------------------------------------+
1 row in set (0.00 sec)
2.匹配字符串的结尾部分,利用匹配方式:'匹配字符串$'
查询department表中function_字段以产品结尾的字段,如下:
mysql> select * from department -> where function_ regexp '产品$';
+------+-----------+--------------+-------------+
| d_id | d_name | function_ | address |
+------+-----------+--------------+-------------+
| 1001 | 科研部 | 研发产品 | 3号楼5层 |
| 1002 | 生产部 | 生产产品 | 5号楼1层 |
+------+-----------+--------------+-------------+
2 rows in set (0.00 sec)
注意查询自负在$自负前面,和前面匹配字段前面部分是相反的。
查询department的d_id字段以6结尾的记录:
mysql> select * from department-> where d_id regexp '6$';
Empty set (0.00 sec)
3. 英文句号.能匹字符串中任意一个字符,包括回车和换行
查找department表中d_id字段,类似1..3的记录(开头和结尾分别是1和3,中间2位任意),如下:
mysql> select * from department where d_id -> regexp '^1..3$';
+------+-----------+--------------+-------------+
| d_id | d_name | function_ | address |
+------+-----------+--------------+-------------+
| 1003 | 销售部 | 策划销售 | 5号楼1层 |
+------+-----------+--------------+-------------+
1 row in set (0.00 sec)
查询employee表中,name字段中以'赵'开头,'才'结尾的记录,中间还有一个字可以任意,如下:
mysql> select * from employee where name-> regexp '^赵.才$';
+-----+------+-----------+------+------+-----------------------------------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+-----------+------+------+-----------------------------------+
| 6 | 1006 | 赵天才 | 40 | 男 | 广东省广州市西华里街道 |
+-----+------+-----------+------+------+-----------------------------------+
1 row in set (0.01 sec)
可以看出,在匹配中,英文句号.可以匹配任何一个符号。
4.匹配字符集中任意一个字符
查找employee中homeaddr字段中,含有'北上广'三个字符中任何一个字符的记录,如下:
mysql> select * from employee where -> homeaddr regexp '[北上广]';
+-----+------+-----------+------+------+-----------------------------------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+-----------+------+------+-----------------------------------+
| 1 | 1001 | 张三 | 26 | 男 | 北京市海淀区 |
| 2 | 1001 | 李四 | 24 | 女 | 北京市昌平区 |
| 6 | 1006 | 赵天才 | 40 | 男 | 广东省广州市西华里街道 |
+-----+------+-----------+------+------+-----------------------------------+
3 rows in set (0.00 sec)
在department表中查询字段d_name中含有'研产策'三个字符中任何一个字符的记录,如下:
mysql> select * from department where d_name regexp '[研产策]';
+------+-----------+--------------+-------------+
| d_id | d_name | function_ | address |
+------+-----------+--------------+-------------+
| 1001 | 科研部 | 研发产品 | 3号楼5层 |
| 1002 | 生产部 | 生产产品 | 5号楼1层 |
+------+-----------+--------------+-------------+
2 rows in set (0.00 sec)
查找department表中d_id字段中有字母的记录,如下:
mysql> select * from department where d_id -> regexp '[a-z]';
Empty set (0.00 sec)
[]可以指定集合区间,中间用-连接即可.
5.匹配除了字符集中任何一个字符(比如说,不是’张三‘,那么李四就可以。)
在表employee中的name字段匹配a-r以外的字符,如下:
mysql> select * from employee where name regexp '[^a-r]';
+-----+------+-----------+------+------+-----------------------------------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+-----------+------+------+-----------------------------------+
| 1 | 1001 | 张三 | 26 | 男 | 北京市海淀区 |
| 2 | 1001 | 李四 | 24 | 女 | 北京市昌平区 |
| 3 | 1002 | 王五 | 25 | 男 | 湖南省长沙市 |
| 6 | 1006 | 赵天才 | 40 | 男 | 广东省广州市西华里街道 |
+-----+------+-----------+------+------+-----------------------------------+
4 rows in set (0.00 sec)
在表employee中的name字段匹配a-r,张王李 以外的字符,如下:
mysql> select * from employee where-> name regexp '[^a-r张王李]';
+-----+------+-----------+------+------+-----------------------------------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+-----------+------+------+-----------------------------------+
| 1 | 1001 | 张三 | 26 | 男 | 北京市海淀区 |
| 2 | 1001 | 李四 | 24 | 女 | 北京市昌平区 |
| 3 | 1002 | 王五 | 25 | 男 | 湖南省长沙市 |
| 6 | 1006 | 赵天才 | 40 | 男 | 广东省广州市西华里街道 |
+-----+------+-----------+------+------+-----------------------------------+
4 rows in set (0.00 sec)
注意:只要某个记录的name中没有a-r张王李,那么就会被查出来,也就是说,如果想不被查出来,除非这个记录的name字段每个字符都在 a-r张王李 之中。
6.匹配指定的字符串,字符串之间用 | 连接
查询employee表中的homeaddr中长沙,如下:
mysql> select * from employee where homeaddr regexp '长沙';
+-----+------+--------+------+------+--------------------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+--------+------+------+--------------------+
| 3 | 1002 | 王五 | 25 | 男 | 湖南省长沙市 |
+-----+------+--------+------+------+--------------------+
1 row in set (0.00 sec)
查询employee表中的homeaddr中长沙或者广州,如下:
mysql> select * from employee where homeaddr regexp '长沙|广州';
+-----+------+-----------+------+------+-----------------------------------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+-----------+------+------+-----------------------------------+
| 3 | 1002 | 王五 | 25 | 男 | 湖南省长沙市 |
| 6 | 1006 | 赵天才 | 40 | 男 | 广东省广州市西华里街道 |
+-----+------+-----------+------+------+-----------------------------------+
2 rows in set (0.00 sec)
注意:匹配的字符串中间不要有空格,否则空格也算一个字符。
7.匹配多个该符号之前的字符。比如a*b,就是某个记录所有的字符b前面是否存在前面有字符a的情况,包括0个。
根据我自己的运行情况,字符a和b都必须是一个字符或者汉字。
查询employee的homeaddr字段是否多个里前面是否有广,如下:
mysql> select * from employee where homeaddr regexp '广*里';
+-----+------+-----------+------+------+-----------------------------------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+-----------+------+------+-----------------------------------+
| 6 | 1006 | 赵天才 | 40 | 男 | 广东省广州市西华里街道 |
+-----+------+-----------+------+------+-----------------------------------+
1 row in set (0.00 sec)
注意:如果a和b不止一个字符,那么结果是0 set。
8.+和*类似,不过就是至少得1个。例如a+b,多个b前面至少有一个a。
例如,查询employee表中的字段homeaddr中,多个d前面至少有一个有n。
mysql> select * from employee where homeaddr regexp 'n+d';
+-----+------+------+------+------+----------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+------+------+------+----------+
| 4 | 1004 | Aric | 15 | 男 | England |
+-----+------+------+------+------+----------+
1 row in set (0.00 sec)
9.使用{M}或者{M,N}指定字符串连续出现的次数。
查询employee表中的d_id字段,出现连续2个0的,如下:
mysql> select * from employee where -> d_id regexp '0{2}';
+-----+------+-----------+------+------+-----------------------------------------+
| num | d_id | name | age | sex | homeaddr |
+-----+------+-----------+------+------+-----------------------------------------+
| 1 | 1001 | 张三 | 26 | 男 | 北京市海淀区 |
| 2 | 1001 | 李四 | 24 | 女 | 北京市昌平区 |
| 3 | 1002 | 王五 | 25 | 男 | 湖南省长沙市 |
| 4 | 1004 | Aric | 15 | 男 | England |
| 5 | 1005 | John | 54 | 男 | gongzhufen of haidian strict of beijing |
| 6 | 1006 | 赵天才 | 40 | 男 | 广东省广州市西华里街道 |
+-----+------+-----------+------+------+-----------------------------------------+
6 rows in set (0.01 sec)
同上,查询连续3个的,如下:
mysql> select * from employee where d_id regexp '0{3}';
Empty set (0.00 sec)
mysql正则表达式简单相关推荐
- MySQL从入门到精通50讲(十一)-MySQL正则表达式及事务
前言 声明:以下是博主精心整理的机器学习和AI系列文章,博主后续会不断更新该领域的知识: 人工智能AI实战系列代码全解析 手把手教你ML机器学习算法源码全解析 有需要的小伙伴赶紧订阅吧. MySQL ...
- mysql正则表达式配置_G. MySQL正则表达式
附录G:MySQL正则表达式 正则表达式是为复杂搜索指定模式的强大方式. MySQL采用Henry Spencer的正则表达式实施,其目标是符合POSIX 1003.2.请参见附录C:感谢.MySQL ...
- MySQL正则表达式的使用
在MySQL中正则表达式在where条件关键字后使用,我们可以用他来筛选查看数据以及删除数据,开头.结尾.包含简单的筛选我们也可以通过like关键字来进行筛选,但正则表达式能够进行更为复杂的筛选.这里 ...
- mysql正则表达式讲解_MySQL 正则表达式详解
MySQL 正则表达式 在前面的章节我们已经了解到MySQL可以通过 LIKE ...% 来进行模糊匹配. MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正 ...
- linux 用root安装mysql数据库_Linux上安装Mysql及简单的使用详解
1. 安装mysql sudo apt-get update sudo apt-get install mysql-server sudo apt-get install python-mysqldb ...
- Ubuntu 安装mysql和简单操作
2019独角兽企业重金招聘Python工程师标准>>> ubuntu上安装mysql非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-s ...
- mysql 正则表达式_MySQL(基础正则表达式)
什么是正则表达式嘞,引用一段百度百科的一段话: 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表 ...
- MySQL的简单使用-(一)
MySQL的简单使用 使用MySQL命令行工具 Windows 用户使用: MySQL Client, 输入密码 Linux: mysql -u用户名 -p密码mysql -uroot -p 显示数据 ...
- mysql正则表达式regexp_mysql - 正则表达式 RegExp
-- mysql 正则表达式 RegExp -- 操作符 -- ^ 匹配输入字符串的开始位置. -- $ 匹配输入字符串的结束位置. -- . 匹配除 "\n" 之外的任何单个字符 ...
最新文章
- Spring Boot 中使用 MongoDB 增删改查
- reorder-list——链表、快慢指针、逆转链表、链表合并
- 如何在java中叠加图层
- device or resource busy_北海or涠洲岛旅游攻略(收藏篇)
- 8tupian图片加密平台源码 v3.5
- 微信小程序-page
- 编程语言对比 主程序传参
- test.php变成夏总,test.php
- 应用程序到偏好设置跳转 以及 应用程序之间的跳转
- 高等数学第七版下册 同济大学数学系 编 课后答案 习题解析
- IOS Core ML如何把输入从MLMultiArray转换为image
- 平面设计基础(PS)知识点总结
- 仿9GAG制作过程(五)
- LeetCode第一题——曼哈顿距离
- #93 输出N以内的所有素数
- swift - 不成文规定
- CSS中常用选择器总结
- Linux下conda安装caffe(超简单),pb转caffe
- 刚学习阿里云VOD,获取视频播放地址
- poj 1187 陨石的秘密
热门文章
- 首次合作带给我的感想
- wp7 视频下载 资源收集
- [Python爬虫] scrapy爬虫系列 一.安装及入门介绍
- Git之深入解析如何选择修订的版本
- HarmonyOS之数据管理·分布式文件服务的应用
- HarmonyOS之常用布局PositionLayout的使用
- 马斯克表示担心人工智能可能会在5年内超越人类
- 教小学妹学算法:诺基亚引出的动态规划问题
- Spring_mvc ioc/DI 控制反转与依赖注入
- Jeson nano + 思岚激光雷达rplidar_s1 + ubuntu18.04