正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。
1. 基本的字符匹配
- regexp后面所跟的内容作为正则表达式。
- '.' 是正则表达式中一个特殊的字符,表示匹配任意一个字符,注意:只是一个。
- 匹配不区分大小写,如果需要区分,需要使用binary关键字。
select column1 from TABLE where column2 regexp '9999';
--'.'匹配任意【一个】字符
select column1 from TABLE where column2 regexp '.999';
--不区分大小写
select column1 from TABLE where column2 regexp 'Hello World';
--需要区分大小写时,使用binary
select column1 from TABLE where column2 regexp binary 'Hello World';
2. 进行or匹配-使用'|'
- 匹配模式:'exp1 | exp2 | exp3......| expn'
- 功能类似于or语句,多个or条件可以并入单个正则表达式
select column1 from TABLE where column2 regexp 'keyword1|keyword2|keyword3';
3. 匹配几个字符之一-使用'[]'
- []是另外一种形式的or语句,匹配模式:'[exp1exp2exp3......expn]'
- 匹配指定集合中的任意一个字符:'[exp1exp2exp3......expn]'
- 匹配指定集合以外的字符:在集合的开始处加入'^':'[^exp1exp2exp3......expn]'
4. 匹配范围-使用'-'
- 使用'-'来定义一个范围,匹配模式:'[m-n]'
- 匹配数字0-9:[0-9]等价于[0123456789]
- 匹配字母:[a-z]
5. 匹配特殊字符-使用'\\'
- 使用'\\'来对字符进行转义,MySQL要求使用两个反斜杠,MySQL解释一个,正则表达式解释一个。
元字符 | \\f | \\n | \\r | \\t | \\v |
说明 | 换页 | 换行 | 回车 | 制表 | 纵向制表 |
6. 匹配字符类
[:digit :] | 任意数字,同[0-9] |
[:lower:] | 任意小写字母,同[a-z] |
[:upper:] | 任意大写字母 |
[:alnum:] | 任意字母和数字,同[a-zA-Z0-9] |
[:space:] | 包括空格在内的任意字符 |
7. 匹配多个实例
使用重复字符元,来实现对匹配数目的更强控制。
元字符 | 说明 |
* | 0个或者多个匹配 |
+ | 1个或者多个匹配,同{1,} |
? | 匹配位于?前面字符的0个或者1个,同{0,1}, |
{n} | 匹配前面字符的n个 |
{n,} | 匹配不少于n个 |
{n,m} | 匹配数目的范围,m不超过255 |
8. 定位符
使用定位元字符来匹配指定位置的文本
元字符 | 说明 |
^ | 文本的开始 |
$ | 文本的结尾 |
[[:<:]] | 词的开始 |
[[:>:]] | 词的结尾 |
9. 简单的正则表达式测试
--regexp 的返回结果:0(不匹配);1(匹配)
--输入:
select 'puhan is a pig?' regexp 'is';
--输出:
+-------------------------------+
| 'puhan is a pig?' regexp 'is' |
+-------------------------------+
| 1 |
+-------------------------------+