mysql 正则表达式的匹配
基本字符匹配
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
. 表示匹配任意一个字符
SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;
like 和 regexp 的区别,like匹配整个字符串,regexp 匹配子串
SELECT prod_name
FROM products
WHERE prod_name LIKE '1000' # 不会有记录返回
ORDER BY prod_name
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000' # 返回一个记录
ORDER BY prod_name;
mysql 中的正则表达式匹配不区分大小写
#为了区分大小写可以用 binary 关键字
#如果 改 'JetPack .000' 为 'jetPack .000'就不会有返回
SELECT prod_name
FROM products
WHERE prod_name REGEXP BINARY 'JetPack .000'
or 匹配
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000|3000'
ORDER BY prod_name;
匹配几个字符之一
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;
prod_name
1 ton anvil
2 ton anvil
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1|2|3 Ton'
ORDER BY prod_name;
prod_name
1 ton anvil
2 ton anvil
JetPack 1000
JetPack 2000
TNT (1 stick)
SELECT prod_name
FROM products
WHERE prod_name REGEXP ' Ton'
ORDER BY prod_name;
prod_name
.5 ton anvil
1 ton anvil
2 ton anvil
[^12]匹配除这些字符之外的东西
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[^12] Ton'
ORDER BY prod_name;
prod_name
.5 ton anvil
匹配范围 [0-3] [a-z]
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5] Ton'
ORDER BY prod_name;
prod_name
.5 ton anvil
1 ton anvil
2 ton anvil
匹配特殊字符串
\\.
\\-
\\[
\\]
换页 \\f
换行 \\n
回车 \\r
制表 \\t
纵向制表 \\v
使用两个斜杠的原因在于:
一个给 mysql 解析,一个给正则表达式库解析
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\...Ton'
ORDER BY prod_name ;
字符类
[:alnum:]
[:alpha:]
[:digit:]
[:lower:]
[:upper:]
等等
匹配多个实例 – 重复元字符
* 0个或多个匹配
+ 1个或多个匹配 == {1,}
? 0个或1个匹配 == {0,1}
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围 (m 不超过 255)
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
ORDER BY prod_name ;
prod_name
TNT (1 stick)
TNT (5 sticks)
# 匹配连在一起的四位数字
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[:digit:]]{4}'
ORDER BY prod_name ;
prod_name
JetPack 1000
JetPack 2000
定位符 – 匹配字符串特定位置上的信息
^ 文本的开始
$ 文本的结束
[[:<:]] 词的开始
[[:>:]] 词的结束
#找出一个以数字或者小数点开头的字符串
SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\\.]'
ORDER BY prod_name;
prod_name
.5 ton anvil
1 ton anvil
2 ton anvil
# 注意:^的双重用途 ,^ 有两种用法。
# 在集合中用来否定集合,或者在字符串的开始处来
# 声明以某某开头
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000$' # like 1000 == regexp '^1000$'
ORDER BY prod_name ;
prod_name
JetPack 1000
简单正则表达式的测试方法
# 返回 0,表示不匹配,返回 1,表示匹配
SELECT 'hello' REGEXP '[0-9]';
SELECT 'hel123' REGEXP '[0-9]';