MySQL-正規表示式詳解

LiberHome發表於2022-06-11

和LIKE操作符用法相似,REGEXP告訴MySQL,後面跟的是正規表示式。

基本字元匹配

在正規表示式中 “.” 這個符號表示匹配任意一個字元,例如:

SELECT p_name FROM products WHERE p_name REGEXP '.00' 

這句話就可以匹配500和300等p_name

或匹配

搜尋兩個串之一,類似SELECT的OR語句

SELECT p_name FROM products WHERE p_name REGEXP '300|500' 

匹配幾個字元之一

例如,想要匹配1bill和2bill和3bill,可以這樣寫:

SELECT p_name FROM products WHERE p_name REGEXP '[1|2|3]bill'

也可以直接簡寫成:

SELECT p_name FROM products WHERE p_name REGEXP '[123]bill'

匹配字符集和的否定

只用在前面加一個^,例如想找到除了123以外的任何字元:

SELECT p_name FROM products WHERE p_name REGEXP '[^123]'

匹配範圍

可以用‘-’結合[]來定義範圍,比如[1-3]、[c-g]例如:

SELECT p_name FROM products WHERE p_name REGEXP '[1-3]bill'

匹配特殊字元

匹配特殊字元需要用‘//’來開頭,比如匹配‘.’:

SELECT p_name FROM products WHERE p_name REGEXP '//.'

匹配字元類(character class)

? 不是很常用 :

匹配多個例項

舉個例子,如果要同時匹配‘Bill (1 apple)’和‘Bill (8 apples)’:

SELECT p_name FROM products WHERE p_name REGECXP 'Bill \\([0-9] apple?\\)'

關鍵在於apple和apples的處理,這裡用到的是'?',除此之外還有以下這些:

匹配特定位置

以上都是任意位置匹配,下面介紹文字和詞的開頭或者結尾匹配:
例如,要匹配‘1 apple'8 apple’:

SELECT p_name FROM products WHERE p_name REGECXP '^[0-9] apple'

除了文字開頭用'^'結尾用'$'之外,還有這些:


參考:Forta B. MySQL crash course[M]. Pearson Education India, 2006.

相關文章