正規表示式是為複雜搜尋指定模式的強大方式。
正規表示式描述了一組字串。最簡單的正規表示式是不含任何特殊字元的正規表示式。例如,正規表示式hello匹配hello。
非平凡的正規表示式採用了特殊的特定結構,從而使得它們能夠與1個以上的字串匹配。例如,正規表示式hello|word匹配字串hello或字串word。
作為乙個更為複雜的示例,正規表示式b[an]*s匹配下述字串中的任何乙個:bananas,baaaaas,bs,以及以b開始、以s結束、並在其中包含任意數目a或n字元的任何其他字串。
對於regexp操作符,正規表示式可以使用任何下述特殊字元和結構:
匹配字串的開始部分。mysql> select 'fo/nfo' regexp '^fo$'; -> 0mysql> 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.*$'; -> 1select 'f' regexp '^f.'; ->0select 'f1' regexp '^f.'; ->1
·a*匹配0或多個a字元的任何序列。mysql> select 'ban' regexp '^ba*n'; -> 1mysql> select 'baaan' regexp '^ba*n'; -> 1mysql> select 'bn' regexp '^ba*n'; -> 1select 'f' regexp '^f*'; ->1
·a+匹配1個或多個a字元的任何序列。mysql> select 'ban' regexp '^ba+n'; -> 1mysql> select 'bn' regexp '^ba+n'; -> 0select 'faacc' regexp '^fa+'; ->1
·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'; -> 0mysql> 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)*$'; -> 0mysql> select 'pipi' regexp '^(pi)*$'; -> 1
·,或符號提供了編寫正規表示式的更通用方式,能夠匹配模式的很多前述原子(或「部分」)。m和n均為整數。
oa*可被寫入為a。
oa+可被寫入為a。
oa?可被寫入為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'; -> 0mysql> 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]$'; -> 0mysql> select 'axbc' regexp '^[a-dxyz]+$'; -> 1mysql> select 'axbc' regexp '^[^a-dxyz]+$'; -> 0mysql> 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
mysql 正規表示式
已知mysql可以通過 like 來進行模糊匹配。mysql 同樣也支援其他正規表示式的匹配,mysql中使用 regexp 操作符來進行正規表示式匹配。例項 查詢name欄位中以 st 為開頭的所有資料 mysql select name from person tbl where name re...
MySQL正規表示式
在前面我們已經看到了mysql的模式匹配 like mysql支援另一種型別的模式匹配的操作基於正規表示式和正規表示式運算子。如果知道php或perl,那麼它是非常簡單的,因為這匹配非常相似於指令碼正規表示式。以下是模式的 其可以連同regexp運算子使用。模式什麼樣的模式匹配 開始的乙個字串 結束...
MySQL 正規表示式
在前面的章節我們已經了解到mysql可以通過 like 來進行模糊匹配。mysql 同樣也支援其他正規表示式的匹配,mysql中使用 regexp 操作符來進行正規表示式匹配。如果您了解php或perl,那麼操作起來就非常簡單,因為mysql的正規表示式匹配與這些指令碼的類似。下表中的正則模式可應用...