mysql正则表达式匹配应用.doc

上传人:cn****1 文档编号:547699189 上传时间:2023-06-06 格式:DOC 页数:9 大小:73KB
返回 下载 相关 举报
mysql正则表达式匹配应用.doc_第1页
第1页 / 共9页
mysql正则表达式匹配应用.doc_第2页
第2页 / 共9页
mysql正则表达式匹配应用.doc_第3页
第3页 / 共9页
mysql正则表达式匹配应用.doc_第4页
第4页 / 共9页
mysql正则表达式匹配应用.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《mysql正则表达式匹配应用.doc》由会员分享,可在线阅读,更多相关《mysql正则表达式匹配应用.doc(9页珍藏版)》请在金锄头文库上搜索。

1、mysql where子句的模式匹配今天在应用中遇到了这样的一个问题,有一个字段 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 * FROM tb WHERE t1 REGEXP 3-5,1-5,3-5,1-5,1-5,1-5,1-5,1-5,1-5,3-5,1-5,1-5,1-5,1-5,1-5,1-5%;1. 使用LIKE和NOT LIKE比较操作符(注

2、意不能使用=或!=);2. 模式默认是忽略大小写的;3. 允许使用”_”匹配任何单个字符,”%”匹配任意数目字符(包括零字符);MySQL还提供象UNIX实用程序的扩展正则表达式模式匹配的格式:1. 使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,他们是同义词);2. REGEXP模式匹配与被匹配字符的任何地方匹配,则匹配成功(即只要被匹配字符包含或者可以等于所定义的模式,就匹配成功);不同于LIKE模式匹配,只有和整个值匹配,才匹配成功(即只有被匹配字符完全和所定义的模式匹配,才匹配成功)3. REGEXP默认也是不区分大小写,可以使用BINARY关键词强制区

3、分大小写;如:SELECT * FROM pet WHERE name REGEXP BINARY B;4. 正则表达式为一个表达式,它能够描述一组字符串。REGEXP操作符完成MySQL的扩展正则表达式匹配。REGEXP实现的功能是如果被匹配字符中部分或完全符合所定义的表达式描述的字符,则表示匹配成功。1)最简单的正则表达式是不含任何特殊字符的正则表达式,如hello。SELECT * FROM pet WHERE name REGEXP hello;表示的意思是如果name这列的某一行包含hello这个单词,则匹配就成功了。(注意和LIKE的区别,LIKE要求name这列的某一行必须完全等

4、于hello,才匹配成功)。2)非平凡的正则表达式,除了含有最简单表达式那些东西,还需要采用特殊的特殊结构,用到的字符,往下看。(因此,通常的正则表达式是普通单词和这些正则表达式字符构成的表达式)5. 扩展正则表达式的一些字符:1) .匹配任何单个字符;2) 匹配在方括号内的任何字符,可以使用-表示范围,如a-z,0-9,而且可以混合a-dXYZ表示匹配a,b,c,d,X,Y,Z 中的任何一个;(注意使用括号以及|的方法也可以达到相同的效果,如(a|b|c)匹配a,b,c中的任何一个);此外可以使用表示否定,如 a-z表示不含有a-z中间的任何一个字符;3) *表示匹配0个或多个在它前面的字符

5、。如x*表示0个或多个x字符,.*表示匹配任何数量的任何字符;4) 可以将模式定位必须匹配被匹配字符的开始或结尾,在匹配模式前加”:表示匹配从被匹配字符的最开头开始,在匹配模式后加”$”:表示匹配要进行到被匹配字符的最末尾。5) +表示匹配1个或多个在它前面的字符。如a+表示1个或多个a字符。6) ?表示匹配0个或1个在它前面的字符。如a?表示0个或1个a字符。7) |如de|abc表示匹配序列de或者abc。注意虽然也可以表示匹配中的某一个,但是每次仅仅能表示单个字符及a-bXYZ实际每一次只代表了一个字符。()括号可以应用在表达式中,使得更容易理解。9) a5表示匹配共5个a,a2,8表示

6、匹配28个a。a*可以写成a0, 第二个参数省略表示没有上界;a+可以写成a1,;a?可以写成a0,1更准确地讲,an与a的n个实例准确匹配。an,匹配a的n个或更多实例。am,n匹配a的mn个实例,包含m和nm和n必须位于0RE_DUP_MAX(默认为255)的范围内,包含0和RE_DUP_MAX。如果同时给定了m和n,m必须小于或等于n。10) 标准类别:character_class::常用的一些标准类别,一般在中使用,由于用在中故和a-z类似,每一次只能顶替一个字符。(这个有点类似perl里面定义的常用的一些标准类别:w表示一个单词字符即a-zA-Z0-9;W一个非单词字符与w相反;

7、d一个数字即0-9;D一个非数字;s一个白空间字符即tfrn;f为换页符;S一个非白空间字符)标准的类别名称:alnum文字数字字符alpha文字字符blank空白字符cntrl控制字符digit数字字符graph图形字符lower小写文字字符print图形或空格字符punct标点字符space空格、制表符、新行、和回车upper大写文字字符xdigit十六进制数字字符使用实例:SELECT justalnums REGEXP :alnum:+;解释其中:alnum:由于:alnum:表示文字数字字符,它又用在中,故:alnum:代表一个字符它为一个文字或者数字。后面的+号表示1个或多个这样的

8、文字或数字。上述语句返回1.那是因为justalnums中是由字母组成的。11)字边界::表示结束:其定义了一个单词的开始和结束边界,这个单词为字字符,这样:代表这个字字符后面的部分。字字符为alnum类的字母数字字符或下划线(_);因此:均代表不是字字符的字符,即只要不是字母数字字符以及下划线(_)即可。因此其可以为什么都不是。因此:能够匹配如下的所有情况:即word单词本身,word* 解释*代表不是字母数字以及_的任何字符(如,word-net);*word(如,micorsoft word);*word*(如,this is a word program.)举例::SELECT a w

9、ord a REGEXP :; 结果为真SELECT a xword a REGEXP :; 结果为假最后注意的注意:要在正则表达式中使用特殊字符,需要在这些字符前面添加2个反斜杠,举例:SELECT 1+2 REGEXP 1+2; 结果为0SELECT 1+2 REGEXP 1+2; 结果为0SELECT 1+2 REGEXP 1+2; 结果为1解释:这是因为MySQL解析程序解析该SQL语句时:首先将字符串1+2解析为1+2;然后把1+2当作正则表达式,由正则表达式库来解析,它代表1+2。因此需要加上2个反斜杠。不要经常犯加一个反斜杠的错误,加一个反斜杠会莫名其妙:如SELECT 1t2

10、REGEXP 1t2;结果会返回1本来的意思是匹配1制表符t以及2,但是由于只添加了一个所以,解析以后编程了1t2,所以匹配成功。12).characters.和=character_class=附录G:MySQL正则表达式正则表达式是为复杂搜索指定模式的强大方式。MySQL采用Henry Spencer的正则表达式实施,其目标是符合POSIX 1003.2。请参见附录C:感谢。MySQL采用了扩展的版本,以支持在SQL语句中与REGEXP操作符一起使用的模式匹配操作。请参见3.3.4.7节,“模式匹配”。在本附录中,归纳了在MySQL中可用于REGEXP操作的特殊字符和结构,并给出了一些示例

11、。本附录未包含可在Henry Spencer的regex(7)手册页面中发现的所有细节。该手册页面包含在MySQL源码分发版中,位于regex目录下的regex.7文件中。正则表达式描述了一组字符串。最简单的正则表达式是不含任何特殊字符的正则表达式。例如,正则表达式hello匹配hello。非平凡的正则表达式采用了特殊的特定结构,从而使得它们能够与1个以上的字符串匹配。例如,正则表达式hello|word匹配字符串hello或字符串word。作为一个更为复杂的示例,正则表达式Ban*s匹配下述字符串中的任何一个:Bananas,Baaaaas,Bs,以及以B开始、以s结束、并在其中包含任意数目

12、a或n字符的任何其他字符串。对于REGEXP操作符,正则表达式可以使用任何下述特殊字符和结构: 匹配字符串的开始部分。mysql SELECT fonfo REGEXP fo$; - 0mysql SELECT fofo REGEXP fo; - 1 $匹配字符串的结束部分。mysql SELECT fono REGEXP fono$; - 1mysql SELECT fono REGEXP fo$; - 0 .匹配任何字符(包括回车和新行)。mysql SELECT fofo REGEXP f.*$; - 1mysql SELECT fornfo REGEXP f.*$; - 1 a*匹配0

13、或多个a字符的任何序列。mysql SELECT Ban REGEXP Ba*n; - 1mysql SELECT Baaan REGEXP Ba*n; - 1mysql SELECT Bn REGEXP Ba*n; - 1 a+匹配1个或多个a字符的任何序列。mysql SELECT Ban REGEXP Ba+n; - 1mysql SELECT Bn REGEXP Ba+n; - 0 a?匹配0个或1个a字符。mysql SELECT Bn REGEXP Ba?n; - 1mysql SELECT Ban REGEXP Ba?n; - 1mysql SELECT Baan REGEXP Ba?n; - 0 de|abc匹配序列de或abc。mysql SE

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号