在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)+'