SQL之正则表达式的简单使用

一 正则表达式列表

 比较运算符 regexp

 ^   开始
 $    结束
.    除了“\n”换行   之外的任何单个字符
[..]      匹配包含的任意字符
[^...]    匹配除了xx的任意字符
p1|p2|p3      或者
*    匹配前面的子表达式0次或者多次   zo*  能匹配z  以及 zoo 
+     匹配前面的子表达式一次或者多次
{n}     匹配确定的n次
{n,m}    至少出现n次,最多m次

二 正则表达式的简单实践

use mydb2;
-- 正则表达式   

-- 注意  正则表达式应该写在where的语句中

--  ^ 在字符串开始处进行匹配
select 'abc' REGEXP '^a';  -- abc是否以a开头?
-- 例如:在product表中查找所有以 ‘海’开头的商品
-- 注意,正则放在where语句中
select * from product where pname REGEXP  '^海';

-- $ 在字符串末尾开始匹配
select 'abc' REGEXP  'a$';
select 'abc' REGEXP  'c$';
-- 在product表中查找所有以 ‘水’结尾的商品、
select * from product where pname REGEXP '水$';

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

-- [...]匹配括号内的任意单个字符

select 'abc' REGEXP '[xyz]';
select 'abc' REGEXP '[xyc]';

-- [^...]匹配括号内的任意字符  都不在 前面
select 'a' REGEXP '[^abc]';   --  注意  中括号的[^] 是除了他之外的意思, 如果是小括号的,那就是以他开头,下面的  |  会用到
select 'x' REGEXP '[^abc]';
select 'abc' REGEXP '[^ac]';


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

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

--   a1 | a2  匹配a1 或者a2
select 'a' REGEXP 'a|b';
select 'b' REGEXP 'a|b';
select 'b' REGEXP '^(a|b)';  -- 是不是以a/b开头?   (联系[^..]的,^,注意,这个就是以xx开头的意思了)
select 'a' REGEXP '^(a|b)';
select 'c' REGEXP '^(a|b)';


-- a{m}  匹配m个a
select 'auuuus' REGEXP 'au{4}s';
select 'auuuus' REGEXP 'au{3}s';

-- a{m,}  匹配最少m个a,最多无限个a
select 'auuuus' REGEXP 'au{3,}s';
select 'auuuus' REGEXP 'au{4,}s';
select 'auuuus' REGEXP 'au{5,}s';


-- a{m,}  匹配最少m个a,最多无限个a
select 'auuuus' REGEXP 'au{3,}s';
select 'auuuus' REGEXP 'au{4,}s';
select 'auuuus' REGEXP 'au{5,}s';


-- a{m,}  匹配最少m个a,最多n个a
select 'auuuus' REGEXP 'au{3,5}s';
select 'auuuus' REGEXP 'au{4,5}s';
select 'auuuus' REGEXP 'au{5,10}s';


-- (abc)  
-- 是一个序列匹配,不用括号括起来都是用单个字符去匹配,如果要把多个字符作为一个整体去匹配就需要用到括号,所以口号适合上面的所有的情况
select 'xababy' REGEXP 'x(abab)y';
select 'xababy' REGEXP 'x(ab)*y'; -- * 是0 次或者多次
select 'xabababy' REGEXP 'x(ab){1,2}y';  -- ab  出现最少一次,最多两次






你可能感兴趣的:(MySql,正则表达式,sql,前端)