正则表达式是用某种模式去匹配某个字符串的一个方式。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正则表达式简单相关推荐

  1. MySQL从入门到精通50讲(十一)-MySQL正则表达式及事务

    前言 声明:以下是博主精心整理的机器学习和AI系列文章,博主后续会不断更新该领域的知识: 人工智能AI实战系列代码全解析 手把手教你ML机器学习算法源码全解析 有需要的小伙伴赶紧订阅吧. MySQL ...

  2. mysql正则表达式配置_G. MySQL正则表达式

    附录G:MySQL正则表达式 正则表达式是为复杂搜索指定模式的强大方式. MySQL采用Henry Spencer的正则表达式实施,其目标是符合POSIX 1003.2.请参见附录C:感谢.MySQL ...

  3. MySQL正则表达式的使用

    在MySQL中正则表达式在where条件关键字后使用,我们可以用他来筛选查看数据以及删除数据,开头.结尾.包含简单的筛选我们也可以通过like关键字来进行筛选,但正则表达式能够进行更为复杂的筛选.这里 ...

  4. mysql正则表达式讲解_MySQL 正则表达式详解

    MySQL 正则表达式 在前面的章节我们已经了解到MySQL可以通过 LIKE ...% 来进行模糊匹配. MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正 ...

  5. linux 用root安装mysql数据库_Linux上安装Mysql及简单的使用详解

    1. 安装mysql sudo apt-get update sudo apt-get install mysql-server sudo apt-get install python-mysqldb ...

  6. Ubuntu 安装mysql和简单操作

    2019独角兽企业重金招聘Python工程师标准>>> ubuntu上安装mysql非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-s ...

  7. mysql 正则表达式_MySQL(基础正则表达式)

    什么是正则表达式嘞,引用一段百度百科的一段话: 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表 ...

  8. MySQL的简单使用-(一)

    MySQL的简单使用 使用MySQL命令行工具 Windows 用户使用: MySQL Client, 输入密码 Linux: mysql -u用户名 -p密码mysql -uroot -p 显示数据 ...

  9. mysql正则表达式regexp_mysql - 正则表达式 RegExp

    -- mysql 正则表达式 RegExp -- 操作符 -- ^ 匹配输入字符串的开始位置. -- $ 匹配输入字符串的结束位置. -- . 匹配除 "\n" 之外的任何单个字符 ...

最新文章

  1. Spring Boot 中使用 MongoDB 增删改查
  2. reorder-list——链表、快慢指针、逆转链表、链表合并
  3. 如何在java中叠加图层
  4. device or resource busy_北海or涠洲岛旅游攻略(收藏篇)
  5. 8tupian图片加密平台源码 v3.5
  6. 微信小程序-page
  7. 编程语言对比 主程序传参
  8. test.php变成夏总,test.php
  9. 应用程序到偏好设置跳转 以及 应用程序之间的跳转
  10. 高等数学第七版下册 同济大学数学系 编 课后答案 习题解析
  11. IOS Core ML如何把输入从MLMultiArray转换为image
  12. 平面设计基础(PS)知识点总结
  13. 仿9GAG制作过程(五)
  14. LeetCode第一题——曼哈顿距离
  15. #93 输出N以内的所有素数
  16. swift - 不成文规定
  17. CSS中常用选择器总结
  18. Linux下conda安装caffe(超简单),pb转caffe
  19. 刚学习阿里云VOD,获取视频播放地址
  20. poj 1187 陨石的秘密

热门文章

  1. 首次合作带给我的感想
  2. wp7 视频下载 资源收集
  3. [Python爬虫] scrapy爬虫系列 一.安装及入门介绍
  4. Git之深入解析如何选择修订的版本
  5. HarmonyOS之数据管理·分布式文件服务的应用
  6. HarmonyOS之常用布局PositionLayout的使用
  7. 马斯克表示担心人工智能可能会在5年内超越人类
  8. 教小学妹学算法:诺基亚引出的动态规划问题
  9. Spring_mvc ioc/DI 控制反转与依赖注入
  10. Jeson nano + 思岚激光雷达rplidar_s1 + ubuntu18.04