软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
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年11日历
2018-11-16 19:37:29
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --