在sql语言中一般使用正则表达式过滤数据
01or的关系
a|b 结果=字段1(包含a)+字段2(包含b)
意思是字段中有a或者b都可以
SELECT *
FROM student.re
WHERE restr REGEXP 'a|b'
【】匹配括号内的单个字符
SELECT *
FROM student.re
WHERE restr REGEXP '[a]'
如果觉得和上一个没关系,请看下面例子
SELECT *
FROM student.re
WHERE restr REGEXP '[ab]'
【ab】表示【】里面有a或者b=a|b
事实上上面的正则表达式也可以按照下面方式改写
SELECT *
FROM student.re
WHERE restr REGEXP '[a|b]'
【m-n】
表示匹配到m-n任意一个字符包括端点值
SELECT *
FROM student.re
WHERE restr REGEXP '[1-a]'
【m-n】=m|。。。+。。。|n
好吧,我承认这是一种在现实当中没人会去这样用的傻方法
不过,这也只是想帮你发现之间的关系,方便记忆
特殊的
mm?ns
表示选择mn或者mmn可以理解为
mm?ns=mn|mmn
SELECT *
FROM student.re
WHERE restr REGEXP 'aa|b'
【^ABC】
表示除ABC外必须有其他的
SELECT *
FROM student.re
WHERE restr REGEXP '[^abc]'
02指数的关系
a{m}
匹配到有m个a
SELECT *
FROM student.re
WHERE restr REGEXP 'a{2}'
a{m,}
匹配到m或者多个a
SELECT *
FROM student.re
WHERE restr REGEXP 'a{1,}'
这里其实可以理解为,对a不设置上限
有了不设置上限,有没有不设置下限呢?
SELECT *
FROM student.re
WHERE restr REGEXP 'a{,1}'!
类似的还有a{}
SELECT *
FROM student.re
WHERE restr REGEXP 'a{}'
结果和上面的一样
m能为0吗?当然可以
SELECT *
FROM student.re
WHERE restr REGEXP 'a{0,}'
等同于全选,虽然有结果。但是起不到过滤作用,是个鸡肋,没有卵用。
a{m,n}
匹配m到n个a
SELECT *
FROM student.re
WHERE restr REGEXP 'a{1,2}'
03其他关系
^a表示
以a开头的
SELECT *
FROM student.re
WHERE restr REGEXP '^ab'
a$
表示以a结尾的
SELECT *
FROM student.re
WHERE restr REGEXP 'ab$'
.a在字符串中必须有a。且a前必须有任意一个字符
SELECT *
FROM student.re
WHERE restr REGEXP '.ab'
ab+
匹配一个或多个ab,不包括空
SELECT *
FROM student.re
WHERE restr REGEXP 'ab+'
(。。。)意思是将()内的看成单一元素进行操作
(ab)+
ab,abab,ababab。。。。
SELECT *
FROM student.re
WHERE restr REGEXP '(ab)+'