天天看點

mysql必知必會(六):正規表達式過濾

正規表達式

mysql僅支援多數正規表達式實作的一個很小的子集

基本字元比對

查詢pro_name包含文本1000的所有行

SELECT prod_name FROM products WHERE prod_name REGEXP '1000' ORDER BY prod_name;      
mysql必知必會(六):正規表達式過濾

查詢prod_name中任意包含000的所有行

. 是正規表達式中的一個特殊字元

SELECT prod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;      
mysql必知必會(六):正規表達式過濾

進行OR比對

| 表示或的關系

查詢prod_name包含1000或者2000的所有行

SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;      
mysql必知必會(六):正規表達式過濾

比對幾個字元之一

[] 表示比對特定的字元,它表示一組字元,比對任意一個。比如[123],是[1|2|3]的縮寫

查詢prod_name包含1 Ton或者2 Ton或者3 Ton的所有行

SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton';      
mysql必知必會(六):正規表達式過濾

比對範圍

集合可用來定義要比對的一個或者多個字元,如比對數字0到9,可寫作[0-9]

查詢prod_name包含1 Ton到5 Ton的所有行

SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;      
mysql必知必會(六):正規表達式過濾

比對特殊字元

需要使用\轉義

查詢vend_name中包含 . 的字元的所有行

SELECT vend_name FROM vendors WHERE vend_name REGEXP '\\.' ORDER BY vend_name;      
mysql必知必會(六):正規表達式過濾

比對多個執行個體

重複元字元

元字元 說明
* 0個或多個比對
+ 1個或者多個比對(等于{1, } )
? 0個或1個比對(等于{0, 1})
{ n } 指定數目的比對
{ n, } 不少于指定數目的比對
{n, m} 比對數目的範圍(m不超過255)

查詢出prod_name中包含1 stick和5 sticks的所有行

\( \) 比對(),[0-9]比對任意數字,sticks?比對stick和sticks,s?表示s可選,出現0次或出現1次

SELECT prod_name FROM products WHERE prod_name REGEXP '\\([0-9] sticks?\\)' ORDER BY prod_name;      
mysql必知必會(六):正規表達式過濾

定位符

定位元字元

元字元 說明
^ 文本的開始
$ 文本的結尾

查詢以一個數(包括小數點開始的數)的所有産品

SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]' ORDER BY prod_name;      

繼續閱讀