mysql必知必会(六):正则表达式过滤

正则表达式

mysql仅支持多数正则表达式实现的一个很小的子集

基本字符匹配

查询pro_name包含文本1000的所有行

SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;

image

查询prod_name中任意包含000的所有行
. 是正则表达式中的一个特殊字符

SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;

image

进行OR匹配

| 表示或的关系
查询prod_name包含1000或者2000的所有行

SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;

image

匹配几个字符之一

[] 表示匹配特定的字符,它表示一组字符,匹配任意一个。比如[123],是[1|2|3]的缩写

查询prod_name包含1 Ton或者2 Ton或者3 Ton的所有行

SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton';

image

匹配范围

集合可用来定义要匹配的一个或者多个字符,如匹配数字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;

image

匹配特殊字符

需要使用\转义
查询vend_name中包含 . 的字符的所有行

SELECT vend_name FROM vendors WHERE vend_name REGEXP '\\.' ORDER BY vend_name;

image

匹配多个实例

重复元字符

元字符 说明
* 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;

image

定位符

定位元字符

元字符 说明
^ 文本的开始
$ 文本的结尾

查询以一个数(包括小数点开始的数)的所有产品

SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]' ORDER BY prod_name;

image

posted @ 2022-07-08 16:41  cnhkzyy  阅读(246)  评论(0编辑  收藏  举报