正则表达式介绍
正则表达式是用来匹配文本的特殊的串
正则表达式用正则表达式语言建立
正则表达式具有你必须学习的特殊的语法和指令
使用MySQL正则表达式
正则表达式的作用是匹配文本,将一个模式[正则表达式]与一个文本串进行比较
MySQL用WHERE子句对正则表达式提供了初步的支持
MySQL仅支持多数正则表达式实现的一个很小的子集
基本字符匹配
REGEXP
.:匹配任意一个字符
默认下正则表达式匹配不区分大小写,若要区分用 REGEXP BINARY
进行OR匹配
|
匹配几个字符之一
[xx1,xx2,...,xxn]
[^xx1,xx2,...,xxn]// 否定版本
匹配范围
[num1-num2]
[alp1-alp2]
匹配特殊字符
为了匹配特殊字符,必须用\\为前导
\\-表示查找-
\\.表示查找.
正则表达式内具有特殊意义的所有字符都必须以这种方式转义
其他
\\f 换页
\\n 换行
\\r 回车
\\t 制表
\\v 纵向制表
\\\ 反斜杠
匹配字符类
[:alnum:] 任意字母和数字
[:alpha:] 任意字符
[:blank:] 空格和制表
[:cntrl:] ASCII控制字符
[:digit:] 任意数字
[:graph:]
[:lower:] 任意小写字母
[:space:] 任意空白字符
[:upper:] 任意大写字母
匹配多个实例
目前为止使用的所有正则表达式都试图匹配单次出现
如存在一个匹配
该行被检索出来
如不存在
检索不出任何行
有时需对匹配的数目进行更强的控制
重复元字符
* 0个或多个匹配
+ 1个或多个匹配
? 0个或1个匹配
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
+---------------------+
| prod_name |
| INT (1 stick) |
| INT (5 sticks) |
+---------------------+
'[[:digit:]]{4}'// 匹配连在一起的4位数字
定位符
目前为止的所有例子都是匹配一个串中任意位置的文本
为匹配特定位置的文本,需用下表的定位符
定位元字符
元字符 说明
^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>;]] 词的结尾
'^[0-9\\.]'// 找出以数字或小数点开始的字符串
LIKE需要整个串匹配才可以
REGEXP需要串的某个子串匹配模式即可
简单的正则表达式测试
SELECT value REGEXP 'xxx'