mysql模式匹配和正規表示式

2021-06-22 15:40:38 字數 4700 閱讀 4255

sql模式匹配

_  下劃線匹配任何單個字元

%  匹配任意數碼字元

正規表示式的匹配

使用regexp和not regexp操作符

『.』匹配任何單個的字元。

字元類「[...]」匹配在方括號內的任何字元。例如,「[abc]」匹配「a」、「b」或「c」。為了命名字元的範圍,使用乙個「-」。「[a-z]」匹配任何字母,而「[0-9]」匹配任何數字。

「 * 」匹配零個或多個在它前面的字元。例如,「x*」匹配任何數量的「x」字元,「[0-9]*」匹配任何數量的數字,而「.*」匹配任何數量的任何字元。

為了找出以「b」開頭的名字,使用「^」匹配名字的開始:

mysql> select * from pet where name regexp '^b';

select * from `student` where `username` regexp '1$'

為了找出包含乙個「w」的名字,使用以下查詢:

mysql> select * from pet where name regexp 'w';

你也可以使用「」「重複n次」操作符重寫前面的查詢:

mysql> select * from pet where name regexp '^.$';

對於regexp操作符,正規表示式可以使用任何下述特殊字元和結構:

匹配字串的開始部分。

mysql>select 'fo\nfo' regexp '^fo$';-> 0
mysql>select 'fofo' regexp '^fo';-> 1
匹配字串的結束部分。

mysql>select 'fo\no' regexp '^fo\no$';-> 1
mysql>select 'fo\no' regexp '^fo$';-> 0
匹配任何字元(包括回車和新行)。

mysql>select 'fofo' regexp '^f.*$';-> 1
mysql>select 'fo\r\nfo' regexp '^f.*$';-> 1
·         a*

匹配0或多個a字元的任何序列。

mysql>select 'ban' regexp '^ba*n';-> 1
mysql>select 'baaan' regexp '^ba*n';-> 1
mysql>select 'bn' regexp '^ba*n';-> 1
·         a+

匹配1個或多個a字元的任何序列。

mysql>select 'ban' regexp '^ba+n';-> 1
mysql>select 'bn' regexp '^ba+n';-> 0
·         a?

匹配0個或1個a字元。

mysql>select 'bn' regexp '^ba?n';-> 1
mysql>select 'ban' regexp '^ba?n';-> 1
mysql>select 'baan' regexp '^ba?n';-> 0
·         de|abc

匹配序列de或abc。

mysql>select 'pi' regexp 'pi|apa';-> 1
mysql>select 'axe' regexp 'pi|apa';-> 0
mysql>select 'apa' regexp 'pi|apa';-> 1
mysql>select 'apa' regexp '^(pi|apa)$';-> 1
mysql>select 'pi' regexp '^(pi|apa)$';-> 1
mysql>select 'pix' regexp '^(pi|apa)$';-> 0
·         (abc)*

匹配序列abc的0個或多個例項。

mysql>select 'pi' regexp '^(pi)*$';-> 1
mysql>select 'pip' regexp '^(pi)*$';-> 0
mysql>select 'pipi' regexp '^(pi)*$';-> 1
·         ,

或符號提供了編寫正規表示式的更通用方式,能夠匹配模式的很多前述原子(或「部分」)。m和n均為整數。

o        a*

可被寫入為a。

o        a+

可被寫入為a。

o        a?

可被寫入為a。

更準確地講,a與a的n個例項準確匹配。a匹配a的n個或更多例項。a匹配a的m~n個例項,包含m和n。

m和n必須位於0~re_dup_max(預設為255)的範圍內,包含0和re_dup_max。如果同時給定了m和n,m必須小於或等於n。

mysql>select 'abcde' regexp 'a[bcd]e';-> 0
mysql>select 'abcde' regexp 'a[bcd]e';-> 1
mysql>select 'abcde' regexp 'a[bcd]e';-> 1
·         [a-dx], [^a-dx]

匹配任何是(或不是,如果使用^的話)a、b、c、d或x的字元。兩個其他字元之間的「-」字元構成乙個範圍,與從第1個字元開始到第2個字元之間的所有字元匹配。例如,[0-9]匹配任何十進位制數字 。要想包含文字字元「]」,它必須緊跟在開括號「[」之後。要想包含文字字元「-」,它必須首先或最後寫入。對於對內未定義任何特殊含義的任何字元,僅與其本身匹配。

mysql>select 'axbc' regexp '[a-dxyz]';-> 1
mysql>select 'axbc' regexp '^[a-dxyz]$';-> 0
mysql>select 'axbc' regexp '^[a-dxyz]+$';-> 1
mysql>select 'axbc' regexp '^[^a-dxyz]+$';-> 0
mysql>select 'gheis' regexp '^[^a-dxyz]+$';-> 1
mysql>select 'gheisa' regexp '^[^a-dxyz]+$';-> 0
·         [.characters.]

在括號表示式中(使用[和]),匹配用於校對元素的字串行。字元為單個字元或諸如新行等字元名。在檔案regexp/cname.h中,可找到字元名稱的完整列表。

mysql>select '~' regexp '[[.~.]]';-> 1
mysql>select '~' regexp '[[.tilde.]]';-> 1
·         [=character_class=]

在括號表示式中(使用[和]),[=character_class=]表示等同類。它與具有相同校對值的所有字元匹配,包括它本身,例如,如果o和(+)均是等同類的成員,那麼[[=o=]]、[[=(+)=]]和[o(+)]是同義詞。等同類不得用作範圍的端點。

·         [:character_class:]

在括號表示式中(使用[和]),[:character_class:]表示與術語類的所有字元匹配的字元類。標準的類名稱是:

alnum

文字數字字元

alpha

文字字元

blank

空白字元

cntrl

控制字元

digit

數字字元

graph

圖形字元

lower

小寫文字字元

print

圖形或空格字元

punct

標點字元

space

空格、製表符、新行、和回車

upper

大寫文字字元

xdigit

十六進製制數字字元

它們代表在ctype(3)手冊頁面中定義的字元類。特定地區可能會提供其他類名。字元類不得用作範圍的端點。

mysql>select 'justalnums' regexp '[[:alnum:]]+';-> 1

VB 正規表示式匹配模式

正規表示式匹配模式 引用了microsoft vbscript regular expressions 5.5 後就可以宣告正則相關物件了。主要有三個物件 regexp matchcollection match。1.regexp這是vb使用正規表示式匹配模式的主要物件了。其提供的屬性用於設定那些用...

正規表示式匹配模式描述

模式描述 w匹配字母數字及下劃線 w匹配非字母數字及下劃線 s匹配任意空白字元,等價於 t n r f s匹配任意非空字元 d匹配任意數字,等價於 0 9 d匹配任意非數字 a匹配字串開始 z匹配字串結束,如果是存在換行,只匹配到換行前的結束字串 z匹配字串結束 g匹配最後匹配完成的位置 n匹配乙個...

正規表示式 匹配

字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...