mysql 正则表达式的匹配

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]';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值