正则化表达式:用来匹配文本的特殊的串(字符集合)。正则化表达式用正则表达式语言来建立
MySQL和正则表达式的关系
MySQL使用WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤SELECT检索出的数据
1.基本字符匹配
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;
SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_nam;
. 是正则化表达式语言中一个特殊的字符,表示匹配任意一个字符
LIKE和REGEXP的区别:
MySQL正则化表达式匹配不区分大小写,如果要区分大小写,在REGEXP后面使用关键字BINARY
2.进行OR匹配
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;
|从功能上类似于在SELECT语句中使用OR语句
'1000|2000|3000’将匹配1000或2000或3000
3.匹配几个字符之一
使用[]匹配特定的字符
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;
结果
1 ton anvil
2 ton anvil
[]是另一种形式的OR语句
[^123]匹配除这些字符之外的任何东西
4.匹配范围
集合可以定义要匹配的一个或者多个字符
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5] Ton'
ORDER BY prod_name;
#不限于数值型的范围
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[a-z] Ton'
ORDER BY prod_name;
5.匹配特殊的字符
为了匹配特殊的字符,必须使用\作为前导(转义)
例如:\-表示查找-
\.表示查找.
\也可以用来引用元字符
\f 换页
\n 换行
\r 回车
\t 制表
\v 纵向制表
匹配\ 使用\\
6.定位符
匹配指定位置的文本信息
定位元字符
^文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]]词的结尾
例子:如果想查找一个数(包括一小数点开始的数)开始的信息,怎么办?简单搜索[0-9\.]或者[[:digit:]\.]是不行的,因为它将在文本内任意位置进行查找匹配
解决办法使用定位符^
SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\\.] Ton'
ORDER BY prod_name;
表示匹配串的开始,[0-9\.]只在.或者任意数字为串中第一个字符时才匹配他们
^的两种用途
1.在集合[]中出现,表示否定该集合
2.在其它地方出现,表示用来指定串的开始处