MySQL学习笔记:regexp正则表达式
在MySQL中,模糊搜索的时候主要用两种方式:
1.like
2.regexp + 正则表达式 性能优于like
正则表达式描述了一组字符串。
- 最简单的正则表达式是不含任何特殊字符的正则表达式。例如,正则表达式hello匹配hello。
- 非平凡的正则表达式采用了特殊的特定结构,从而使得它们能够与1个以上的字符串匹配。例如,正则表达式hello|word匹配字符串hello或字符串word。
- 作为一个更为复杂的示例,正则表达式B[an]*s匹配下述字符串中的任何一个:Bananas,Baaaaas,Bs,以及以B开始、以s结束、并在其中包含任意数目a或n字符的任何其他字符串。
例子:
邮箱格式: '^[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}$'
主要使用的操作符如下:

1.(^)字符
匹配字符串的开始位置,如“^a”表示以字母a开头的字符串。
SELECT 'xxxxyy' REGEXP '^xx';
2.($)字符
匹配字符串的结束位置,如“X^”表示以字母X结尾的字符串。
SELECT 'xxxxyy' REGEXP 'Y$'; # 不区分大小写
SELECT 'xxxxyy' REGEXP 'y$';
3.(.)字符
这个字符就是英文下的点,它匹配任何一个字符,包括回车、换行等。
4.(*)字符
星号匹配0个或多个字符,在它之前必须有内容。
SELECT 'xxxxyy' REGEXP 'x*';
5.(+)字符
匹配1个或多个字符,在它之前也必须有内容。加号跟星号的用法类似,只是星号允许出现0次,加号则必须至少出现一次。
6.(?)字符
问号匹配0次或1次。
其他实例:
# 以"举报"开头
SELECT * FROM rep_require WHERE order_title REGEXP '^举报'; # 以"问题"结尾
SELECT * FROM rep_require WHERE order_title REGEXP '问题$'; # 包含"无照经营"字符串
SELECT * FROM rep_require WHERE order_title REGEXP '无照经营'; # 以a-z开头 或者 ok结尾
SELECT * FROM rep_require WHERE order_title REGEXP '^[a-z]|ok$';
SELECT 'fonfo' REGEXP '^fo$'; # -- 字符串完全等于fo 定义了开头和结尾
SELECT 'fonfo' REGEXP '^fo.+fo$'; # -- fo开头 中间包含至少1个字符 fo结尾
SELECT 'fonfo' REGEXP '^fo.*fo$'; # -- . 不用加[] fo开头 fo结尾 中间随意
SELECT 'fofo' REGEXP '^fo$'; # -- 不行
SELECT 'fofo' REGEXP '^f.*'; # -- f开头 后面随意 0个或者无数个
SELECT 'Ban' REGEXP '^Ba*n'; # -- 以B开头 任意几个a 再n
SELECT 'Baaaaan' REGEXP '^Ba*n'; # -- 同上
SELECT 'Bn' REGEXP '^Ba*n'; # -- 同上 SELECT 'Ban' REGEXP '^Ba+n'; # # -- 至少一个a
SELECT 'Bn' REGEXP '^Ba+n'; # -- 不行 没有a 匹配不到 SELECT 'Ban' REGEXP '^Ba?n'; # -- 0个a 或者 1个a
SELECT 'Bn' REGEXP '^Ba?n'; # -- 同上
SELECT 'Baaaan' REGEXP '^Ba?n'; # -- 同上
# pi 或者 apa 规定了^$ 就必须完全相等才能匹配得到
SELECT 'pi' REGEXP 'pi|apa';
SELECT 'axe' REGEXP 'pi|apa';
SELECT 'apa' REGEXP 'pi|apa';
SELECT 'apa' REGEXP '^(pi|apa)$';
SELECT 'pi' REGEXP '^(pi|apa)$';
SELECT 'pix' REGEXP '^(pi|apa)$';
# 多个pi匹配
SELECT 'pi' REGEXP '^(pi)*$';
SELECT 'pip' REGEXP '^(pi)*$';
SELECT 'pipi' REGEXP '^(pi)*$';
特殊写法:{1} {1,} {2,3}
- a* 可以写成{0,}
- a+ 可以写成a{1,}
- a? 可以写成a{0,1}
在{}内只有一个整型参数i,表示字符只能出现i次;
在{}内有一个整型参数i,后面跟一个“,”,表示字符可以出现i次或i次以上;
在{}内只有一个整型参数i,后面跟一个“,”,再跟一个整型参数j,表示字符只能出现i次以上,j次以下(包括i次和j次)。
其中的整型参数必须大于等于0,小于等于 RE_DUP_MAX(默认是255)。
如果有两个参数,第二个必须大于等于第一个。
# {1} {1,} {2,3} 写法
SELECT 'xxx' REGEXP 'x{4}'; # 4个x
SELECT 'aXbc' REGEXP '[a-dXYZ]'; # 匹配“a”、“b”、“c”、“d”或“X”
SELECT 'aXbc' REGEXP '^[a-dXYZ]$';
SELECT 'aXbc' REGEXP '^[a-dXYZ]+$';
SELECT 'aXbc' REGEXP '^[^a-dXYZ]+$'; # 匹配除“a”、“b”、“c”、“d”、“X”以外的任何字符。
SELECT 'gheis' REGEXP '^[^a-dXYZ]+$';
SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$';
# “[”、“]”必须成对使用
END 2018-06-01 13:17:19
MySQL学习笔记:regexp正则表达式的更多相关文章
- MySql学习笔记(一) —— 正则表达式的使用
前面介绍利用一些关键字搭配相应的SQL语句进行数据库查找过滤,但随着过滤条件的复杂性的增加,where 子句本身的复杂性也会增加.这时我们就可以利用正则表达式来进行匹配查找. 1.基本字符匹配 ' o ...
- MySql学习笔记(二) —— 正则表达式的使用
前面介绍利用一些关键字搭配相应的SQL语句进行数据库查找过滤,但随着过滤条件的复杂性的增加,where 子句本身的复杂性也会增加.这时我们就可以利用正则表达式来进行匹配查找. 1.基本字符匹配 ' o ...
- mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记
mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...
- 【mysql学习笔记整理】
/*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- MySQL学习笔记一
MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
- Mysql学习笔记(一)数据类型
原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型 Mysql数据类型 含义(有符号) tinyint(m ...
- 初识mysql学习笔记
使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...
- MySQL学习笔记-锁相关话题
在事务相关话题中,已经提到事务隔离性依靠锁机制实现的.在本篇中围绕着InnoDB与MyISAM锁机制的不同展开,进而描述锁的实现方式,多种锁的概念,以及死锁产生的原因. Mysql常用存储引擎的锁 ...
随机推荐
- bug2 The method of type must override a superclass method解决方式(去掉@override可以)
@Override 时出错误: 解决办法是: 一. 因为你的Co ...
- 3:JavaBean,EJB,POJO
JavaBeanJavaBean是公共Java类,但是为了编辑工具识别,需要满足至少三个条件: 有一个public默认构造器(例如无参构造器,) 属性使用public 的get,set方法访问,也就是 ...
- Redis3未授权访问漏洞导致服务器被入侵
今天在腾讯云上搭的开发环境里的一台机器cpu load飚升老高,然后还能登陆上去,top后发现两个可疑进程./root/目录下有修改过的文件./opt目录被干掉了, 后经分析,这台机器上有redis外 ...
- 执行ldconfig命令后报错的解决过程:ldconfig: 目录 /lib 中的 libpng.so 和 libpng15.so.15.13.0 的 so 名称相同但类型不同。
执行ldconfig命令后报错: 目录 /lib 中的 libpng.so 和 libpng15.so.15.13.0 的 so 名称相同但类型不同. 解决过程: mv /lib/libpng.so ...
- P3924 康娜的线段树
P3924 康娜的线段树 题目描述 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以 ...
- JVM体系结构和工作方式
JVM能够跨计算机体系结构来执行Java字节码,主要是由于JVM屏蔽了与各个计算机平台相关的软件或者是硬件之间的差异,使得与平台相关的耦合统一由JVM提供者来实现. 何为JVM ...
- MetaBase
MetaBase是一个快速创建图表的Web站点,对于频繁上新项目,频繁提供数据报表,但人力不足的情况下,是一个不错的选择. 一. 安装部署 在windows环境下可以使用jar.docker的方式,本 ...
- 即时通信系统Openfire分析之二:主干程序分析
引言 宇宙大爆炸,于是开始了万物生衍,从一个连人渣都还没有的时代,一步步进化到如今的花花世界. 然而沧海桑田,一百多亿年过去了…. 好复杂,但程序就简单多了,main()函数运行,敲个回车,一行Hel ...
- Kafka 0.8 Consumer Rebalance
1 Rebalance时机 0.10kafka的rebalance条件 条件1:有新的consumer加入 条件2:旧的consumer挂了 条件3:coordinator挂了,集群选举出新的coor ...
- 博世传感器调试笔记(三)加速度及地磁传感器BMC156
一. 器件简介:1. BMC 156是一款整合三轴地磁传感器与三轴(12bit)加速度传感器于一体的传感器,以BMC 150 电子罗盘模块为基础, 并与Bosch Sensortec 2x ...