目录
一.介绍
二.格式
三.操作
一.介绍
正则表达式(regular expression)描述了一种字符串匹配的规则,正则表达式本身就是一个字符串,使用这个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本。
MySQL通过REGEXP关键字支持正则表达式进行字符串匹配。
二.格式
模式 | 描述 |
^ | 匹配输入字符串的开始位置。 |
$ | 匹配输入字符串的结束位置。 |
. | 匹配除“\n"之外的任何单个字符。 |
[...] | 字符集合。匹配所包含的任意一个字符。例如,"[abc]'可以匹配"plain"中的'a'。 |
[^...] | 负值字符集合。匹配未包含的任意字符。例如,"[^abc]'可以匹配“plain"中的'p'。 |
p1lp2|p3 | 匹配p1或p2或p3。例如,'z]food'能匹配"z”或"food"。"(zlf)ood'则匹配"zood"或"food"。 |
* | 匹配前面的子表达式零次或多次。例如,zo*能匹配"z"以及"zoo"。*等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,'zo+'能匹配""zo"以及"zoo",但不能匹配"z"。+等价于{1,}。 |
{n} | n是一个非负整数。匹配确定的n次。例如,'o{2}不能匹配"Bob"中的'o',但是能匹配"food"中的两个o。 |
{n,m} | m和n均为非负整数,其中n <= m。最少匹配n次且最多匹配m次。 |
三.操作
-- 正则表达式
-- 在字符串开始处进行匹配
select 'abc' regexp '^a'; -- 1
select * from employee where name regexp '^张'
-- $在字符串末尾开始匹配
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 '[abc]'; -- 1
select 'abc' regexp '[ab]'; -- 1
select 'abc' regexp '[ert]'; -- 0
select 'abc' regexp '[abt]'; -- 1
-- [^...]注意^符合只有在[]内才是取反的意思,在别的地方都是表示开始处匹配
select 'abc' regexp '[^abc]'; -- 0
select 'abc' regexp '[^a]'; -- 1
select 'abc' regexp '[^ert]'; -- 1
-- a*匹配0个或多个a,包括空字符串。可以作为占位符使用.有没有指定字符都可以匹配到数据
select 'stab' regexp '.ta*b'; -- 1
select 'stb' regexp '.ta*b'; -- 1
-- a+匹配1个或者多个a,但是不包括空字符
select 'stab' regexp '.ta+b'; -- 1
select 'stb' regexp '.ta+b'; -- 0
-- a?匹配0个或者1个a
select 'stab' regexp '.ta?b'; -- 1
select 'stb' regexp '.ta?b'; -- 1
select 'staab' regexp '.ta?b'; -- 0
-- 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
-- al |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)';-- 0