用正規表示式進行搜尋

肥梁發表於2024-05-28

以下的匹配都試圖匹配單詞出現。如果存在一個匹配則被檢索出來。

  1. 檢索列prod_name包含文字1000的所有行
    select prod_name from products where prod_name REGEXP '1000' order by prod_name;

  2. .在正則中表示一個字元
    select prod_name from products where prod_name REGEXP '.000' order by prod_name;
    結果: Jet 1000
    Jet 2000

  3. OR匹配
    select prod_name from products where prod_name REGEXP '1000|2000' order by prod_name;

  4. 如果想匹配特定字元怎麼辦
    select prod_name from products where prod_name REGEXP '[123] Ton' order by prod_name;

  5. 否定字符集
    select prod_name from products where prod_name REGEXP '[^123] Ton' order by prod_name;

  6. 匹配範圍: 含有1-5 Ton就行,不管前面後面有沒有東西
    select prod_name from products where prod_name REGEXP '[1-5] Ton' order by prod_name;
    結果:.5 Ton
    1 Ton
    2 Ton

  7. 跳脫字元,包括‘. \ | []’
    為了匹配特殊字元,必須使用\為前導。\-表示查詢-, \.表示查詢.
    select vend_name from vendors where vend_name REGEXP '\\.' order by vend_name;
    結果: Furball INC.

其他語言中用單個\來轉義,但是mysql中\來轉義

匹配字元類

說明
:alnum: 任意字母和數字(同[a-zA-z])
:alpha: 任意字元(同a-zA-Z)
:blank: 空格和製表(同\t)
:digit: 任意數字,同[0-9]
:lower: 任意小寫字母,同[a-z]
:upper: 任意大寫字母,同[A-Z]

如果匹配多個字元
重複元字元

元字元 說明
* 0個或者多個匹配
+ 1個或者多個匹配 等於
0個或者1個匹配 等於
n 指定書目的匹配
不少於指定數目的匹配
匹配數目的範圍 m不超過255

相關文章