MySqlRegex的描述

來源:互聯網
上載者:User

Regex(regex)是定義複雜查詢的一個強有力的工具。

這裡是一個簡單的資料,它忽略了一些詳細的資訊。

Regex定義了一個字串的規則。最簡單的Regex不包含任何保留字。例如,Regexhello只和字串"hello"匹配。

一般的Regex使用了某些特殊的結構,所以它能匹配更多的字串。例如,Regexhello|word既能匹配字串"hello"也能匹配字串 "word"。舉一個更複雜一點的例子,RegexB[an]*s可以匹配字串"Bananas"、"Baaaaas" 、"Bs"以及其他任何以B開頭以s結尾的字串,中間可以包括任意個a和任意個n的組合。

一個Regex中的可以使用以下保留字

^

所匹配的字串以後面的字串開頭

mysql> select "fonfo" REGEXP "^fo$"; -> 0(表示不匹配)

mysql> select "fofo" REGEXP "^fo"; -> 1(表示匹配)

$

所匹配的字串以前面的字串結尾

mysql> select "fono" REGEXP "^fono$"; -> 1(表示匹配)

mysql> select "fono" REGEXP "^fo$"; -> 0(表示不匹配)

.

匹配任何字元(包括新行)

mysql> select "fofo" REGEXP "^f.*"; -> 1(表示匹配)

mysql> select "fonfo" REGEXP "^f.*"; -> 1(表示匹配)

a*

匹配任意多個a(包括空串)

mysql> select "Ban" REGEXP "^Ba*n"; -> 1(表示匹配)

mysql> select "Baaan" REGEXP "^Ba*n"; -> 1(表示匹配)

mysql> select "Bn" REGEXP "^Ba*n"; -> 1(表示匹配)

a+

匹配任意多個a(不包括空串)

mysql> select "Ban" REGEXP "^Ba+n"; -> 1(表示匹配)

mysql> select "Bn" REGEXP "^Ba+n"; -> 0(表示不匹配)

a?

匹配一個或零個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(包括空串)

mysql> select "pi" REGEXP "^(pi)*$"; -> 1(表示匹配)

mysql> select "pip" REGEXP "^(pi)*$"; -> 0(表示不匹配)

mysql> select "pipi" REGEXP "^(pi)*$"; -> 1(表示匹配)

{1}

{2,3}

這是一個更全面的方法,它可以實現前面好幾種保留字的功能

a*

可以寫成a{0,}

a+

可以寫成a{1,}

a?

可以寫成a{0,1}

在 {}內只有一個整型參數i,表示字元只能出現i次;在{}內有一個整型參數i,後面跟一個",",表示字元可以出現i次或i次以上;在{}內只有一個整型參數i,後面跟一個",",再跟一個整型參數j,表示字元只能出現i次以上,j次以下(包括i次和j次)。其中的整型參數必須大於等於0,小於等於 RE_DUP_MAX(預設是255)。如果有兩個參數,第二個必須大於等於第一個

[a-dX]

匹配"a"、"b"、"c"、"d"或"X"

[^a-dX]

匹配除"a"、"b"、"c"、"d"、"X"以外的任何字元。"["、"]"必須成對使用

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.]]

表示比較元素的順序。在括弧內的字元順序是唯一的。但是括弧中可以包含萬用字元, 所以他能匹配更多的字元。舉例來說:Regex[[.ch.]]*c匹配chchcc的前五個字元。

[=character_class=]

表示相等的類,可以代替類中其他相等的元素,包括它自己。例如,如果o和(+)是一個相等的類的成員,那麼[[=o=]]、[[=(+)=]]和[o(+)]是完全等價的。

[:character_class:]

在括弧裡面,在[:和:]中間是字元類的名字,可以代表屬於這個類的所有字元。

字元類的名字有: alnum、digit、punct、alpha、graph、space、blank、lower、upper、cntrl、print和xdigit

mysql> select "justalnums" REGEXP "[[:alnum:]]+"; -> 1(表示匹配)

mysql> select "!!" REGEXP "[[:alnum:]]+"; -> 0(表示不匹配)

[[::]]

分別匹配一個單詞開頭和結尾的空的字串,這個單詞開頭和結尾都不是包含在alnum中的字元也不能是底線。

mysql> select "a word a" REGEXP "[[::]]"; -> 1(表示匹配)

mysql> select "a xword a" REGEXP "[[::]]"; -> 0(表示不匹配)

mysql> select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1(表示匹配)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.