mysql必知必会(六):正则表达式过滤
正则表达式
mysql仅支持多数正则表达式实现的一个很小的子集
基本字符匹配
查询pro_name包含文本1000的所有行
SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;
查询prod_name中任意包含000的所有行
. 是正则表达式中的一个特殊字符
SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;
进行OR匹配
| 表示或的关系
查询prod_name包含1000或者2000的所有行
SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;
匹配几个字符之一
[] 表示匹配特定的字符,它表示一组字符,匹配任意一个。比如[123],是[1|2|3]的缩写
查询prod_name包含1 Ton或者2 Ton或者3 Ton的所有行
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton';
匹配范围
集合可用来定义要匹配的一个或者多个字符,如匹配数字0到9,可写作[0-9]
查询prod_name包含1 Ton到5 Ton的所有行
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;
匹配特殊字符
需要使用\转义
查询vend_name中包含 . 的字符的所有行
SELECT vend_name FROM vendors WHERE vend_name REGEXP '\\.' ORDER BY vend_name;
匹配多个实例
重复元字符
元字符 | 说明 |
---|---|
* | 0个或多个匹配 |
+ | 1个或者多个匹配(等于{1, } ) |
? | 0个或1个匹配(等于{0, 1}) |
指定数目的匹配 | |
不少于指定数目的匹配 | |
匹配数目的范围(m不超过255) |
查询出prod_name中包含1 stick和5 sticks的所有行
\( \) 匹配(),[0-9]匹配任意数字,sticks?匹配stick和sticks,s?表示s可选,出现0次或出现1次
SELECT prod_name FROM products WHERE prod_name REGEXP '\\([0-9] sticks?\\)' ORDER BY prod_name;
定位符
定位元字符
元字符 | 说明 |
---|---|
^ | 文本的开始 |
$ | 文本的结尾 |
查询以一个数(包括小数点开始的数)的所有产品
SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]' ORDER BY prod_name;