mysql 正则表达式

来源:互联网 发布:ubuntu 文件权限设置 编辑:程序博客网 时间:2024/06/14 06:05
由MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)


在select中类似下面使用,结果:匹配返回1,不匹配返回0
select "fo" REGEXP "^fo$"


扩展正则表达式的一些字符:
'.'            匹配任何单个的字符。
[...]         匹配在方括号内的任何字符。例如,"[abc]"匹配"a"、"b"或"c"。为了命名字符的范围,使用一个"-"。"[a-z]"匹配任何字母,而"[0-9]"匹配任何数字
" * "        匹配零个或多个在它前面的字符。例如,"x*"匹配任何数量的"x"字符,"[0-9]*"匹配任何数量的数字,而".*"匹配任何数量的任何字符
"^"\"$"    匹配被测试值的开始\结尾
{m[,n]}   内只有一个整型参数m,表示字符只能出现m次;
              后面跟一个",",表示字符可以出现m次及以上; 
              后面跟一个",n",表示字符只能出现m次及以上,n次及以下 ;
              其中的整型参数必须大于等于0,小于等于 RE_DUP_MAX(默认是255) 如果同时给定了m和n,m必须小于或等于n. 
[a-dX]
[^a-dX] 
                匹配任何是(或不是,如果使用^的话)a、b、c、d或X的字符。两个其他字符之间的"-"字符构成一个范围,与从第1个字符开始到第2个字符之间的所有字符匹配。
例如,[0-9]匹配任何十进制数字 。
要想包含文字字符"]",它必须紧跟在开括号"["之后。
要想包含文字字符"-",它必须首先或最后写入。
对于[]对内未定义任何特殊含义的任何字符,仅与其本身匹配。
BINARY  想强制使REGEXP比较区分大小写,使用BINARY关键字使其中一个字符串变为二进制字符串

mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b'
#为了找出以"fy"结尾的名字,使用"$"匹配名字的结尾: mysql> SELECT * FROM pet WHERE name REGEXP 'fy$'; +——–+——–+———+——+————+——-+ | name| owner | species | sex | birth | death | +——–+——–+———+——+————+——-+ | Fluffy | Harold | cat| f | 1993-02-04 | NULL | | Buffy | Harold | dog| f | 1989-05-13 | NULL | +——–+——–+———+——+————+——-+ #为了找出包含正好5个字符的名字,使用"^"和"$"匹配名字的开始和结尾,和5个"."实例在两者之间:mysql> SELECT * FROM pet WHERE name REGEXP '^.....$'; +——-+——–+———+——+————+——-+ | name | owner | species | sex | birth | death | +——-+——–+———+——+————+——-+ | Claws | Gwen| cat| m | 1994-03-17 | NULL | | Buffy | Harold | dog| f | 1989-05-13 | NULL | +——-+——–+———+——+————+——-+ #你也可以使用"{n}""重复n次"操作符重写前面的查询:mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$'; +——-+——–+———+——+————+——-+ | name | owner | species | sex | birth | death | +——-+——–+———+——+————+——-+ | Claws | Gwen| cat| m | 1994-03-17 | NULL | | Buffy | Harold | dog| f | 1989-05-13 | NULL | +——-+——–+———+——+————+——-+select "fonfo" REGEXP "^fo$";
#例子:#    查找srv_keyword最后一个逗号','后的字符串,是null或者是以P-开头的,然后这部分删掉#    如:专服务,规划类服务,P-1605061  |  专服务,规划类服务,null结果都应该是:专服务,规划类服务#    mysql找最后一个符号的位置没有直接的函数,用反转函数reverse间接实现select product_name      ,base_product_name      ,srv_keyword       ,REVERSE(substring(REVERSE(srv_keyword),LOCATE(',',REVERSE(srv_keyword))+1))from srvwhere srv_keyword not like CONCAT("%",product_id,"%")and srv_keyword REGEXP ',(null|(P-.*))$'

0 0
原创粉丝点击