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