资源描述:
《mysql正则表达式匹配应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、mysqlwhere子句的模式匹配今天在应用中遇到了这样的一个问题,有一个字段t1,其中的值类似于:1,1,1,2,3,3,4,4,5,5,2,4,3,2,1,2需要从里面搜索出比如说:第一个逗号前的数字范围为3-5之间,第三个逗号前的数字的范围为3-5之间,第10个逗号前的数字范围为3-5之间,其余的都为1-5之间。。。则sql语句可以这么写:1.SELECT*FROMtbWHEREt1REGEXP'^[3-5],[1-5],[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5],
2、[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5]%';1.使用LIKE和NOTLIKE比较操作符(注意不能使用=或!=);2.模式默认是忽略大小写的;3.允许使用”_”匹配任何单个字符,”%”匹配任意数目字符(包括零字符);MySQL还提供象UNIX实用程序的扩展正则表达式模式匹配的格式:1.使用REGEXP和NOTREGEXP操作符(或RLIKE和NOTRLIKE,他们是同义词);2.REGEXP模式匹配与被匹配字符的任何地方匹配,则匹配成功(即只要被匹配字符包含或者可以等于
3、所定义的模式,就匹配成功);不同于LIKE模式匹配,只有和整个值匹配,才匹配成功(即只有被匹配字符完全和所定义的模式匹配,才匹配成功)3.REGEXP默认也是不区分大小写,可以使用BINARY关键词强制区分大小写;如:SELECT*FROMpetWHEREnameREGEXPBINARY‘^B’;4.正则表达式为一个表达式,它能够描述一组字符串。REGEXP操作符完成MySQL的扩展正则表达式匹配。REGEXP实现的功能是如果被匹配字符中部分或完全符合所定义的表达式描述的字符,则表示匹配成功。1)最简单的正则表
4、达式是不含任何特殊字符的正则表达式,如hello。SELECT*FROMpetWHEREnameREGEXP‘hello’;表示的意思是如果name这列的某一行包含hello这个单词,则匹配就成功了。(注意和LIKE的区别,LIKE要求name这列的某一行必须完全等于hello,才匹配成功)。2)非平凡的正则表达式,除了含有最简单表达式那些东西,还需要采用特殊的特殊结构,用到的字符,往下看。(因此,通常的正则表达式是普通单词和这些正则表达式字符构成的表达式)5.扩展正则表达式的一些字符:1)‘.’匹配任何单个字
5、符;2)[…]匹配在方括号内的任何字符,可以使用’-’表示范围,如[a-z],[0-9],而且可以混合[a-dXYZ]表示匹配a,b,c,d,X,Y,Z中的任何一个;(注意使用括号以及’
6、’的方法也可以达到相同的效果,如(a
7、b
8、c)匹配a,b,c中的任何一个);此外可以使用’^’表示否定,如[^a-z]表示不含有a-z中间的任何一个字符;3)‘*’表示匹配0个或多个在它前面的字符。如x*表示0个或多个x字符,.*表示匹配任何数量的任何字符;4)可以将模式定位必须匹配被匹配字符的开始或结尾,在匹配模式前加”^”
9、:表示匹配从被匹配字符的最开头开始,在匹配模式后加”$”:表示匹配要进行到被匹配字符的最末尾。5)‘+’表示匹配1个或多个在它前面的字符。如a+表示1个或多个a字符。6)‘?’表示匹配0个或1个在它前面的字符。如a?表示0个或1个a字符。7)‘
10、’如de
11、abc表示匹配序列de或者abc。注意虽然[…]也可以表示匹配中的某一个,但是每次仅仅能表示单个字符及[a-bXYZ]实际每一次只代表了一个字符。()括号可以应用在表达式中,使得更容易理解。9)a{5}表示匹配共5个a,a{2,8}表示匹配2~8个a。a*可以
12、写成a{0,}第二个参数省略表示没有上界;a+可以写成a{1,};a?可以写成a{0,1}更准确地讲,a{n}与a的n个实例准确匹配。a{n,}匹配a的n个或更多实例。a{m,n}匹配a的m~n个实例,包含m和nm和n必须位于0~RE_DUP_MAX(默认为255)的范围内,包含0和RE_DUP_MAX。如果同时给定了m和n,m必须小于或等于n。10)标准类别[:character_class:]:常用的一些标准类
13、别,一般在[]中使用,由于用在[]中故和[a-z]类似,每一次只能顶替一个字符。(这个有点类似perl里面定义的常用的一些标准类别:w表示一个单词字符即[a-zA-Z0-9];W一个非单词字符与w相反;d一个数字即[0-9];D一个非数字;s一个白空间字符即[tfr];f为换页符;S一个非白空间字符)标准的类别名称:alnum文字数字字符alpha文字字符bl