软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 数据库 -> 《MySQL必知必会学习笔记》:正则表达式 -> 正文阅读

[数据库]《MySQL必知必会学习笔记》:正则表达式


正则表达式的应用


前面的几节的过滤例子允许用匹配、比较和通配操作符来寻找数据。对于基本的数据过滤,这样就足够了。但是随着过滤条件的复杂性的增加,where子句本身的复杂性也有必要增加。这也就是正则表达式变得有用的地方。
正则表达式是用来匹配文本中特殊的字符集合。
正则表达式不是自己第一次见,在JAVA/C++ 这些语言中,都有正则表达式,不过他们的用途是一样的,都是匹配文本中的字符串。可能具体的用法不太一样,但也差不多。下面将一一进行学习、介绍。

基本字符的匹配


当我们想查找某列中的字符中是否有某个字符时,虽然可以通过前面的博文中介绍的通配符来完成,但是也是可以通过正则表达式来完成的。如下:
select * from student where name regexp '1' order by id;//找出name中含有 字符1的记录。

[img]http://7xknzt.com1.z0.glb.clouddn.com/regexp_v1.PNG
从上面的例子中,或许还没有看到正则表达式所带来的好处,感觉这个不就是和通配符一样的么。有这个感觉是很正常的,因为这个例子确实没有体现出正则表达式的强大之处。看完下面的介绍你可能慢慢就会感觉正则表达式的强大之处。

进行OR匹配


为搜索多个字符串时,在正则表达式中使用 | 进行实现。
select * from student where name regexp '123|456';//|为正则表达式的or操作符。它表示匹配其中之一,因此,只要是字符串中含有123或者是456的记录就返回。

实践结果截图如下:
[img]http://7xknzt.com1.z0.glb.clouddn.com/regexp_v2.PNG

匹配几个字符之一


如果你只想匹配特定的字符,应该怎么办呢?
  • 解决的方法就是:通过制定一组用 [ 和 ] 括起来的字符来完成即可。

例如,如果你想匹配所有字符串中含有偶数数字的数据时,你只需要用[]将指定的数据放入就可以了,具体如下:
select * from student where name regex '[02468]' order by score;//通过[02468]就可以匹配了

[]是另一种形式的or操作符的语句。事实上,[02468]等价于 0|2|4|6|8
[img]http://7xknzt.com1.z0.glb.clouddn.com/regexp_v3.PNG

匹配范围


上面的集合[02468]用来匹配多个字符,而[0123456789] 这个集合就是匹配数字0到9;
为简化这种类型的集合,可以使用-来定义一个范围。
例如:[0123456789] 就可以写成 [0-9];
范围只要是连续的就是合法的,例如[1-3] [7-9] 以及[B-G] 这些集合都是ok的。
[img]http://7xknzt.com1.z0.glb.clouddn.com/regexp_v4.PNG

匹配特殊字符


正则表达式中由具有特定含义的特殊字符构成,例如 [ ] | . 等等。
当我们想在字符串中匹配这些字符时,应该如何进行匹配呢?
相信学过JAVA 或者是C++ 的都知道,如果想匹配这些特殊的字符, 就应该对其进行转义,转义的方法为:在这些特殊的字符前面加上两个反斜杠,即 \\;例如,\\[ , \\] \\| \\. 等;
下面就以 匹配字符串中的 . 这个特殊符号进行举例说明。
select * from student where name regexp '\\.';//返回的结果就是含有字符 . 的结果

如果我们不用 \\对点 进行转义,则因为 点.是用来匹配任意一个字符的,因此,会出现所有的结果,并不是我们想要的。
具体结果如下:
[img]http://7xknzt.com1.z0.glb.clouddn.com/regexp_v5.PNG

匹配字符类


匹配字符类,可以这样理解,就是为了方便,系统给我们提供了一些简写。例如 在JAVA中 使用\\d来匹配任意数字,而在MySQL中 使用[:digit:] 来进行任意数字的匹配
具体见下面表格(图片来源于《MySQL必知必会))
[img]http://7xknzt.com1.z0.glb.clouddn.com/regexp_v6.PNG

匹配多个实例


目前为止使用的正则表达式都试图匹配单次出现。即如果存在一个匹配,则该行就被检索出来,否则就不被检索出来。
但有时需要对匹配的数目进行更强的控制。例如,当你寻找一个单词时,也想它能够找出这个单词的复数形式(即尾随的s)。
select * from student where name regexp 'rang?';//匹配name中含有ran或者是带有后缀g的数据。

[img]http://7xknzt.com1.z0.glb.clouddn.com/regexp_v7.PNG
更多的关于匹配多个实例的符号如下:
[img]http://7xknzt.com1.z0.glb.clouddn.com/regexp_v8.PNG
[img]http://7xknzt.com1.z0.glb.clouddn.com/regexp_v9.PNG

定位符


前面介绍的都是任意位置的匹配,但是,有的时候,我们想在特定的位置进行匹配,例如:想匹配字符串的开始处是否是以 点 开始的,而不是匹配字符串中任意位置是否含有点。这就需要定位符。
[img]http://7xknzt.com1.z0.glb.clouddn.com/regexp10.PNG
使用例子说明如下:
select * from student where name  regexp '^\\.';//检查字符串是否以点开始。

[img]http://7xknzt.com1.z0.glb.clouddn.com/regexp12.PNG
注意:^有两种用法,如下:
  • 在集合中(用[ 和 ]定义的),用它来否定该集合,例如[^01234]:指的就是匹配除了012345其它的字符。
  • 用来指串的开始处。

小结


上面介绍了的东西比较多,相信一下子也比较难以掌握好,但是,提醒大家的是,不要强迫自己去记住这些细节,当我们多几遍正则表达式 ,这些语法方面的细节就掌握了,即使没有掌握,当我们需要的时候,查下资料就ok了。反正就我而言,无论是学习java还是其他的语言的时候关于正则表达式这一块的细节,我是没有去记的,当需要的时候,我就查下资料然后去写就好。
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-03-26 20:50:57  
数据库 最新文章
Python&MySQL&PyQt
最新用python来操作mysql完全解析
mongodb的安装详解
1.PDO简介
《MySQL必知必会学习笔记》:高级联结
【翻译自mos文章】怎么对Microsoft(Office)
MyCAT全局表描述及示例
ocp
关于SQL数据表存储过程表名前缀换成dbo代码
数据库调优教程(二)慢查询数据准备
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年7日历
2018-7-19 13:50:00
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --