正则表达式
regexp操作符,regexp操作符后面跟着的就是正则表达式,正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。
like和regexp的区别
like匹配整个列,如果被匹配的文本仅在列值中出现(没有配合其他通配符),like将不会找到他。regexp在列值内进行匹配,如果被匹配的文本在列值中出现,regexp将会找到它,相应的行将被返回。
举个例子:假设有一个表number表中的数据如下
select n from number where n like '1234';
#显示n = '1234'的三组数据 不会显示 n = '123456789'
select n from number where n regexp '1234';
#全都显示
匹配单个实例
- | :表示匹配其中之一,使用 | 功能上类似or
- [ ] :匹配字符之一,[ ] 是另一种形式的or语句。[123]为[1|2|3]的缩写
- [ - ] :匹配范围,使用-来定义一个范围。例如[1 - 3],[a - z]
- \\ :转义字符,多数正则表达式使用单个反斜杠作为转义字符,但是MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式自己解释一个)
- 匹配字符类 : 存在找出你自己经常使用的数字,所有字母符或所有数字字母字符等的匹配。为更方便工作,也可以使用预定义的字符集,称为字符类
类 | 说明 |
[[:alnum:]] | 任意字母和数字,同[a - z A- Z 0 -9] |
[[:alpha:]] | 任意字符,[a - z A - Z] |
[[:blank:]] | 空格和制表[ \\t ] |
[[:cntrl:]] | ASCII控制字符 ASCII 0到31和127 |
[[:digit:]] | 任意数字 [0 - 9] |
[[:graph:]] | 与[:print:]相同,但不包括空格 |
[[:lower:]] | 任意小写字母 |
[[:print:]] | 任意可打印字符 |
[[:punct:]] | 不在[[:alnum:]]和[[:cntrl:]]的字符 |
[[:space:]] | 包括空格在内的任意空白字符 [\\f\\n\\r\\t\\v] |
[[:upper:]] | 任意大写字母 |
[[:xdigit:]] | 任意十六进制数字 [a - f A - F 0 - 9] |
匹配多个实例
- 常用元字符
元字符 | 说明 |
. | 匹配任意字符 |
^ | 匹配字符串的开始,^在 [ ]中表示否定 |
$ | 匹配字符串的结束 |
- 重复元字符
元字符 | 说明 |
* | 0个或多个匹配 |
+ | 一个或多个匹配(等于{1,}) |
? | 0个或一个匹配(等于{0,1}) |
{n} | 指定数目匹配 |
{n,} | 不少于指定数目的匹配 |
{n,m} | 匹配数目的范围 m不超过255 |
注意元字符是和其后面字符匹配
*n 就是0个或多个n
select 'fofo' regexp '^f.*$'; # 1
select 'fofo' regexp '^fo$'; # 0