正则表达式是用来匹配列值的特殊字符集合,许多领域都有涉及,
MySQL使用的正则表达式仅为其一个小小的子集。
//搜索id包含‘001’的所有学生信息select * from Studentwhere id regexp ‘001‘;
注:regexp匹配列值字串,而like匹配整个列值,这是二者的重要区别。如:
//搜索id是‘001’的学生的信息select * from Studentwhere id like ‘001‘;
同通配符中的‘_‘,用以代替一个字符,如:
//搜索id中含任意字符组合001的学生信息select * from Studentwhere id regexp ‘.001‘;
注:不同于通配符_ ,正则表达式匹配子串,当‘.’放在开头时,仍能匹配到多个字符的字串。
如上列搜索中可以匹配到:1001,10001,100001,而‘_001’仅能匹配到1001;
通过符号‘|’可以实现or匹配,如:
//匹配出id为1001、1002、1003三位学生的所有信息select * from Studentwhere id regexp ‘1001|1002|1003‘;
通过 [ ] 匹配几个字符中的一个,如:
[123]ABC 可以是:1ABC、2ABC、3ABC[ABC]123 可以是:A123、B123、C123
注:
在4的基础上可以有如下表示:
[0-9] 可以是0,1,2,3,... ,9中任意一个数字[a-z] 可以是任意一个小写字母[A-Z] 可以是任意一个大写字母[0-9a-z] 可以是0到9任意一个数字,也可以是任意一个小写字母
注:
如需匹配像 . | \ 等特殊字符,需要用双斜杠\\转义。
前一个 \ 用来向MySQL解释,后一个用于向正则表达式解释。
如需引用元字符,也需使用\\,如:
使用预定义的字符集:
[:alnum:] 任意字母和数字(同[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\r\t\v])[:upper:] 任意大写字母(同[A-Z])[:xdigit:] 任意十六进制数字(同[a-fA-F0-9])
* 0个或多个匹配+ 1个或多个匹配(等于 {1, })? 0个或1个匹配(等于 {0, 1}){n} 指定数目的匹配{n, } 不少于指定数目的匹配{n ,m} 匹配数目的范围(m不超过255)
^ 文本的开始$ 文本的末尾[[:<:]] 词的开始[[:>:]] 词的结尾
注:使用 ^ 和 $ 可以使正则表达式等效Like操作符,如:
//此两者等价select * from Studentwhere id regexp ‘^001$‘;select * from Studentwhere id like ‘001‘;