八.正则表达式

1.简介

正则表达式(regular expression)描述了一种字符串匹配的规则,正则表达式本省就是一个字符串,使用这个字符串来描述,用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索,替换那些符合某个规则的文本。

MySQL通过REGEXP关键字支持正则表达式进行字符串匹配。

2.格式

模式描述
^匹配输入字符串的开始位置
$匹配输入字符串的结束位置
.匹配除"\n"之外的任何单个字符
[…]字符集合. 匹配所包含的任意一个字符, 例如, ‘[abc]’ 可以匹配 "plain"中的’a’
[^…]负值字符集合,匹配未包含的任意字符,例如,‘[^abc]’ 可以匹配"plain"中的’p’
p1|p2|p3匹配p1或p2或p3。例如, ‘z|food’能匹配’z’或’food’。'(z|f)ood’则匹配"zood"或"food"
*匹配前面的子表达式零次或多次。例如, zo*能匹配"Z"以及"zoo". *等价于{0,}
+匹配前面的子表达式一次或多次。例如, 'zo+'能匹配"zo"以及"zoo",但不能匹配"z"。+等价于{1,}
?匹配前面的子表达式零次或一次
|a1|a2 匹配a1或者a2
{n}n是一个非负整数。 匹配确定的n次。例如, 'o(2)‘不能匹配"Bob"中的’o’,但是能匹配"food"中两个o.
{n,m}m和n均为非负整数,其中n<=m, 最少匹配n次且最多匹配m次

3.示例

-- ^在字符串开始处进行匹配
select 'abc' REGEXP '^a'; -- 1

-- $在字符串末尾开始匹配
select 'abc' REGEXP 'a$'; -- 0
select 'abc' REGEXP 'c$'; -- 1

-- . 匹配任意单个字符, 可以匹配除了换行之外的任意字符
select 'abc' REGEXP '.b'; -- 1
select 'abc' REGEXP '.c'; -- 1
select 'abc' REGEXP 'a.'; -- 1

-- [...] 匹配括号内的任意单个字符
select 'abc' REGEXP '[xyz]'; -- 0
select 'abc' REGEXP '[xaz]'; -- 1

-- [^...]注意^符合只有在[]内才是取反的意思,在别的地方都是表示开始处匹配
select 'a' REGEXP '[^abc]'; -- 0
select 'x' REGEXP '[^abc]'; -- 1
select 'abc' REGEXP '[^a]'; -- 1

-- a* 匹配0个或多个a, 包括空字符串,可以作为占位符使用,有没有指定字符都可以匹配到数据
select 'stab' REGEXP '.ta*b'; -- 1
select 'stb' REGEXP '.ta*b';   -- 1
select '' REGEXP 'a*';   -- 1

-- a+ 匹配1个或者多个a, 但是不包括空字符串
select 'stab' REGEXP '[.ta+b]'; -- 1
select 'stb' REGEXP '[.ta+b]'; -- 0

-- a? 匹配0个或者1个a
select 'stb' REGEXP 'ta?b'; -- 1
select 'stab' REGEXP 'ta?b'; -- 1
select 'staab' REGEXP '.ta?b'; -- 0

-- a1|a2 匹配a1或者a2
select 'a' REGEXP 'a|b'; -- 1
select 'b' REGEXP 'a|b'; -- 1
select 'b' REGEXP '^(a|b)'; -- 1
select 'a' REGEXP '^(a|b)'; -- 1
select 'c' REGEXP '^(a|b)'; -- 1

-- a{m} 匹配m个a
select 'auuuuc' REGEXP 'au{4}c'; -- 1
select 'auuuuc' REGEXP 'au{3}c'; -- 0

-- a{m,} 匹配m个或者更多个a
select 'auuuuc' REGEXP 'au{3,}c'; -- 1
select 'auuuuc' REGEXP 'au{4,}c'; -- 1
select 'auuuuc' REGEXP 'au{5,}c'; -- 0

-- a{m, n} 匹配m到n个a, 包括m和n
select 'auuuuc' REGEXP 'au{3, 5}c'; -- 1
select 'auuuuc' REGEXP 'au{4, 5}c'; -- 1
select 'auuuuc' REGEXP 'au{5, 10}c'; -- 0

-- (abc) abc作为一个序列匹配,不用括号括起来都是用单个字符去匹配,
-- 如果要把多个字符作为一个整体去匹配就需要用到括号,所以括号适合上面的所有情况
select 'xababy' REGEXP 'x(abab)y'; -- 1
select 'xababy' REGEXP 'x(ab)*y'; -- 1
select 'xababy' REGEXP 'x(ab){1, 2}y'; -- 1
select 'xababy' REGEXP 'x(ab){3}y'; --0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值