正規表示式是為複雜搜尋指定模式的強大方式。
mysql採用henry spencer的正規表示式實施,其目標是符合posix 1003.2。
歸納了在mysql中可用於regexp操作的特殊字元和結構,並給出了一些示例。本附錄未包含可在henry spencer的regex(7)手冊頁面中發現的所有細節。該手冊頁面包含在mysql原始碼分發版中,位於regex目錄下的regex.7檔案中。
正規表示式描述了一組字串。最簡單的正規表示式是不含任何特殊字元的正規表示式。例如,正規表示式hello匹配hello。
非平凡的正規表示式採用了特殊的特定結構,從而使得它們能夠與1個以上的字串匹配。例如,正規表示式hello|word匹配字串hello或字串word。
作為乙個更為複雜的示例,正規表示式b[an]*s匹配下述字串中的任何乙個:bananas,baaaaas,bs,以及以b開始、以s結束、並在其中包含任意數目a或n字元的任何其他字串。
對於regexp操作符,正規表示式可以使用任何下述特殊字元和結構:
匹配字串的開始部分。
mysql> select 'fo\nfo' regexp '^fo$'; ->0
mysql> select 'fofo' regexp '^fo'; -> 1
匹配字串的結束部分。
mysql> select 'fo\no' regexp '^fo\no$'; -> 1mysql> select 'fo\no' regexp '^fo$'; -> 0
匹配任何字元(包括回車和新行)。
mysql> select 'fofo' regexp '^f.*$'; -> 1mysql> select 'fo\r\nfo' regexp '^f.*$'; -> 1
· a*
匹配0或多個a字元的任何序列。
mysql> select 'ban' regexp '^ba*n'; -> 1mysql> select 'baaan' regexp '^ba*n'; -> 1mysql> select 'bn' regexp '^ba*n'; -> 1
· a+
匹配1個或多個a字元的任何序列。
mysql> select 'ban' regexp '^ba+n'; -> 1mysql> select 'bn' regexp '^ba+n'; -> 0
· a?
匹配0個或1個a字元。
mysql> select 'bn' regexp '^ba?n'; -> 1mysql> select 'ban' regexp '^ba?n'; -> 1mysql> select 'baan' regexp '^ba?n'; -> 0
· de|abc
匹配序列de或abc。
mysql> select 'pi' regexp 'pi|apa'; -> 1mysql> select 'axe' regexp 'pi|apa'; ->0
mysql> select 'apa' regexp 'pi|apa'; -> 1mysql> select 'apa' regexp '^(pi|apa)$'; -> 1mysql> select 'pi' regexp '^(pi|apa)$'; -> 1mysql> select 'pix' regexp '^(pi|apa)$'; -> 0
· (abc)*
匹配序列abc的0個或多個例項。
mysql> select 'pi' regexp '^(pi)*$'; -> 1mysql> 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'; -> 1mysql> 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]'; -> 1mysql> select 'axbc' regexp '^[a-dxyz]$'; ->0
mysql> select 'axbc' regexp '^[a-dxyz]+$'; -> 1mysql> select 'axbc' regexp '^[^a-dxyz]+$'; ->0
mysql> select 'gheis' regexp '^[^a-dxyz]+$'; -> 1mysql> select 'gheisa' regexp '^[^a-dxyz]+$'; -> 0
· [.characters.]
在括號表示式中(使用[和]),匹配用於校對元素的字串行。字元為單個字元或諸如新行等字元名。在檔案regexp/cname.h中,可找到字元名稱的完整列表。
mysql> select '~' regexp '[[.~.]]'; -> 1mysql> select '~' regexp '[[.tilde.]]'; -> 1
· [=character_class=]
在括號表示式中(使用[和]),[=character_class=]表示等同類。它與具有相同校對值的所有字元匹配,包括它本身,例如,如果o和(+)均是等同類的成員,那麼[[=o=]]、[[=(+)=]]和[o(+)]是同義詞。等同類不得用作範圍的端點。
· [:character_class:]
在括號表示式中(使用[和]),[:character_class:]表示與術語類的所有字元匹配的字元類。標準的類名稱是:
alnum
文字數字字元
alpha
文字字元
blank
空白字元
cntrl
控制字元
digit
數字字元
graph
圖形字元
lower
小寫文字字元
圖形或空格字元
punct
標點字元
space
空格、製表符、新行、和回車
upper
大寫文字字元
xdigit
十六進製制數字字元
它們代表在ctype(3)手冊頁面中定義的字元類。特定地區可能會提供其他類名。字元類不得用作範圍的端點。
mysql> select 'justalnums' regexp '[[:alnum:]]+'; -> 1mysql> select '!!' regexp '[[:alnum:]]+'; -> 0
這些標記表示word邊界。它們分別與word的開始和結束匹配。word是一系列字字元,其前面和後面均沒有字字元。字字元是alnum類中的字母數字字元或下劃線(_)。
mysql> select 'a word a' regexp '[[:<:>:]]'; -> 1mysql> select 'a xword a' regexp '[[:<:>:]]'; -> 0
要想在正規表示式中使用特殊字元的文字例項,應在其前面加上2個反斜槓「\」字元。mysql解析程式負責解釋其中乙個,正規表示式庫負責解釋另乙個。例如,要想與包含特殊字元「+」的字串「1+2」匹配,在下面的正規表示式中,只有最後乙個是正確的:
mysql> select '1+2' regexp '1+2'; ->0
mysql> select '1+2' regexp '1\+2'; ->0
mysql> select '1+2' regexp '1\\+2'; -> 1
mysql 字串正則匹配 mysql正規表示式
預備閱讀 mysql中用正規表示式進行搜尋1 使用mysql正規表示式 1 基本字串匹配 select prod name from products where prod name regexp 1000 order by prod name 檢索prod name包含文字1000的所有行。除關鍵...
字串 正則
var s hellow,world 定義乙個字串 s.charat 0 h,第乙個字元 s.charat s.length 1 d,最後乙個字串 s.substring 1,4 ell,第2 4個字元 s.slice 1,4 ell,同上 s.slice 3 rld,最後三個字元 s.indexo...
字串正則匹配
匹配1個或多個 匹配乙個 abc a b false abc a?c true abc a true ab a false 重點就是處理掉 如果匹配的時候 後面沒有字元了那返回真,如果有的話,那麼很簡單,從str中從後往前拿pattern 中 從 開始到pattern末尾個字元個數的字元,繼續遞迴匹...