总结:
(1)匹配几个字符之一:[1|2|3]、[123]表示1或2或3,[123]是[1|2|3]的缩写
(2)正则表达式中.表示匹配任意一个字符, LIKE中‘a_c’ 下划线表示单个字符
(3)定位符:^和$在[]外面表示开头、结束。
(4)取反匹配:^在[]内部表示取反匹配
(5)匹配范围:[1-9]、[a-e]
(6)匹配特殊字符:\\作为前导, 比如\\-。
(7)匹配字符类:
(8)匹配多个实例:
1.匹配商品名含有“1000”的商品
(1)like
SELECT prod_name
FROM products
WHERE prod_name LIKE "%1000%";
(2)正则表达式
SELECT prod_name
FROM products
WHERE prod_name REGEXP BINARY '1000';
为区分大小写,可使用(转BINARY化为二进制)
2. 获取含有1000和2000的商品名称
(1)like
SELECT prod_name
FROM products
WHERE prod_name LIKE "%1000%" OR prod_name LIKE "%2000%";
(2)正则表达式
SELECT prod_name
FROM products
WHERE prod_name REGEXP ".000";
注意: . 是一个特殊字符,表示匹配任意一个字符
也可以使用|(OR匹配)
SELECT prod_name
FROM products
WHERE prod_name REGEXP BINARY "1000|2000";
SELECT prod_name
FROM products
WHERE prod_name REGEXP "[12] Ton";
3.重复匹配
元字符 | 说明 |
---|---|
* | 0或多个匹配 |
+ | 1个或多个(等于{1,}) |
? | 0或1个(等于{0,1}) |
{n} | 重复n次 |
{n,} | 至少重复n次 |
{n,m} | 重复n~m次(m不超过255) |
SELECT prod_name
FROM products
WHERE prod_name REGEXP "\\([1-9] sticks?\\)";
解析:
- “\ \ (” 为转义 “(”
- [0-9] 是数字0~9
- s? 是匹配s或者不匹配s都行,这样就能匹配到stick和sticks
再比如上面的”.000”匹配JetPack 1000和JetPack 2000.我们可以换种方式匹配
SELECT prod_name
FROM products
WHERE prod_name REGEXP "[[:digit:]]{4}";
在字符类[:digit:]外面再加一个”[]”,否则匹配不到。
4.使用SELECT和REGEXP来进行简单测试
在不使用数据库表的情况下测试,没有匹配到时REGEXP总是返回0。含有就返回1,不包含就返回0.
SELECT "hello" REGEXP "[0-9]";