注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

红尘若梦

生活的色彩

 
 
 

日志

 
 

MySQL正则表达式使用  

2015-10-27 14:52:32|  分类: 技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
之前已经说过, MYSQL用WHERE子句只对正则表达式提供了初步的支持,是多数正则表达式实现的一个很小的子集,那么下面就来看看一些小例子。

SELECT name FROM site WHERE name REGEXP '593668' ; #REGEXP后所跟的东西作为正则表达式处理,基本字符匹配,只要包含593668
SELECT name FROM site WHERE name REGEXP '.593668' ; #.表示匹配任意一个字符。
SELECT name FROM site WHERE name REGEXP BINARY '593668.com'; #为区分大小写,可使用BINARY关键字。
SELECT name FROM site WHERE name REGEXP '593668|237h'; #| 作为OR操作符,表示匹配其中之一。可给出两个以上的OR条件。
SELECT name FROM site WHERE name REGEXP '[^w]593668'; #[ ] 匹配任何单一字符。^ 否定一个字符集合
SELECT name FROM site WHERE name REGEXP '\\.593668';\\ 为前导。即转义.正则表达式内具有特殊意义的所有字符都必须以这种方式转义。

看了下,是不是跟其它语言的正规很类似,再看看一些更进一步特殊字符的说明:

\\- 表示查找 -
\\. 表示查找 .

\\f 换页
\\n 换行
\\r 回车
\\t 制表
\\v 纵向制表

通配符说明:

* 0个或多个匹配
+ 1个或多个匹配(等于 {1, })
? 0个或1个匹配(等于 {0, 1})
{n} 指定数目的匹配
{n, } 不少于指定数目的匹配
{n ,m} 匹配数目的范围(m不超过255)

定位符:

^ 文本的开始
$ 文本的末尾
[[:<:]] 词的开始
[[:>:]] 词的结尾

跟其它正则不太类似的:

[:a;num:] 任意字母和数字(同 [a-zA-Z0-9])
[:alpha:] 任意字符(同 [a-zA-Z])
[:blank:] 空格和制表(同 [\\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与["print:] 相同,但不包括空格
[:lower:] 任意小写字线(同 [a-z])
[:print:] 任意可打印字符
[:punct:] 既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符
[space:] 包括空格在内的任意空白字符(同 [\\f\\n\\t\\r\\v])
[:upper:] 任意大小字母(同 [A-Z])
[:xdigit:] 任意十六进制数字(同 [a-fA-F0-9])

总体上可以看出,大部分都是类似的,稍稍有点不同。那么在掌握了这些知识之后,就可以直接进行一些操作了,象之前用LIKE或字符串查找定位之类的函数, 都可以用REGEXP来替换,而且更进一步,需要查找子串,而不是匹配整个串,用正则来处理则更为便利,当然使用正则在全文搜索方面肯定会更好也更自由度。不过请记住,使用正则带来的性能方面肯定有损失。
下列来说一个例子,比如表site中字段sitepara有这么一个值,335,450,分别代表IP值和PV值,如果想要查找位于某个特定区间段的,就可以采用如下SQL语句来实现:

SELECT name FROM site WHERE sitepara REGEXP '^[300-250],[400-450]%'; #取IP在300-350之前,PV值在400-450之间的站

REGEXP之外,还有RLIKE, NOT RLIKE这两个,其中RLIKE跟REGEXP同义,而NOT RLIKE则是取反。
  评论这张
 
阅读(71)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017