一、介绍

正则表达式用来描述或者匹配符合规则的字符串。它的用法和 like 比较相似,但是它又比 like 更强大,能够实现一些很特殊的规则匹配。正则表达式需要使用 regexp 命令,匹配上返回 1 匹配不上返回 0,默认不加条件 regexp 相当于 like "%%",在前面加上 not 相当于 not like。

^          # 在字符的开头处进行匹配
$          # 在字符的末尾处进行匹配
.          # 匹配任何字符(包括回车和新行)
[...]      # 匹配中括号内的任意单个字符
[m-n]      # 匹配m到n之间的任意单个字符,例如[0-9]、[a-z]、[A-Z]
[^..]      # 不能匹配括号内的任意单个字符
a?         # 匹配0个或1个a
a*         # 匹配0个或多个a,包括空,可以作为占位符使用
a+         # 匹配1个或多个a,不包括空
a1|a2      # 匹配a1或a2
a{m}       # 匹配m个a
a{m,}      # 匹配m个或者更多个a
a{m,n}     # 匹配m到n个a
a{,n}      # 匹配0到n个a
(...)      # 将模式元素组成单一元素,例如:(do)?  匹配0个或1个do

二、使用方式

select "abc" regexp "^a"; -- 1
select "abc" regexp "c$"; -- 1
select "abc" regexp "a."; -- 1 
select "abc" regexp ".a"; -- 0

[...]:匹配中括号内的任意单个字符
select "abc" regexp "[xyz]";  -- 0
select "abc" regexp "[xya]";  -- 1

[^...]:注意^符合只有在[]内才是取反的意思,在别的地方都是表示开始处匹配
select "a" regexp "[^abc]";  -- 0
select "x" regexp "[^abc]";  -- 1
select "abc" regexp "[^a]";  -- 1  "abc"作为一个整体,所以它匹配不了a

select "stb" regexp ".ta?b";   -- 1
select "stab" regexp ".ta?b";  -- 1
select "staab" regexp ".ta?b"; -- 0

select "stb" regexp ".ta*b";  -- 1
select "stab" regexp ".ta*b"; -- 1
select "" regexp "a*";     -- 1

select "stb" regexp ".ta+b";  -- 0
select "stab" regexp ".ta+b"; -- 1

select "a" regexp "a|b";    -- 1
select "b" regexp "^(a|b)"; -- 1
select "c" regexp "^(a|b)"; -- 0

select "auuuuc" regexp "au{3}c";  -- 0
select "auuuuc" regexp "au{4}c";  -- 1
select "auuuuc" regexp "au{3,}c"; -- 1
select "auuuuc" regexp "au{4,}c"; -- 1
select "auuuuc" regexp "au{5,}c"; -- 0

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

三、总结

  • 特别要注意最后的()的命令,如果不使用()那么所有的都是指单个字符去做匹配,如果需要使用多个字符作为一个整体去匹配,就需要将多个字符使用()给括起来;
  • 使用 regexp 和 not regexp 操作符(类似like和not like);
  • regexp 默认是不区分大小写,可以使用 binary 关键词强制区分大小写; where name regexp binary "^[A-Z]";
  • regexp 默认是部分匹配原则,即有一个匹配上则返回真。例如:select "Abc" regexp binary "^[A-Z]";