《MySQL必知必會》第九章:用正則表達式進行搜索

@author: Tobin @date: 2019/10/28 19:51:40git

MySQL僅支持多數正則表達式實現的一個很小的子集。正則表達式

# 檢索列prod_name包含文本1000的全部行
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;
# 這裏注意和LIKE的差異。LIKE匹配'1000'是全匹配。必須等於1000才返回值。而REGEXP是隻要包含1000就能夠。

# 匹配任意一個字符
SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;

# MySQL中的正則表達式匹配,自版本3.32.4後不區分大小寫。大寫和小寫都匹配。爲區分大小寫,能夠使用BINARY關鍵字。
# 如 WHERE prod_name REGEXP BINARY 'JetPack .000'

# 進行OR匹配,使用'|'
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;

# 匹配幾個字符之一
# 至關於另外一種形式的|,'[1|2|3] Ton'加括號,不然匹配1,2,3 Ton中的一個
# [^123]表示不匹配其中的任意一個字符
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;

# 匹配多個字符或者數字的簡便寫法
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5] Ton'
ORDER BY prod_name;

# 轉義\\
# \\f 換頁 \\n 換行 \\r 回車 \\t 製表 \\v 縱向製表 \\\匹配反斜槓自己
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\.'
ORDER BY prod_name;

# 匹配字符類
# 舉例。好比[:alnum:] 任意字符和數字,[:alpha:]任意字符

# 匹配多個實例
# * 0個或者多個匹配
# + 1個或者多個匹配
# ? 0個或者1個匹配
# {n} 指定數目的匹配
# {n,} 很多於指定數目的匹配
# {n,m} 匹配數目的範圍 (m不超過255)
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
ORDER BY prod_name;

# 匹配連在一塊兒的任意4位數字
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[:digit:]]{4}'
ORDER BY prod_name;

# 定位符
# ^ 文本的開始 $ 文本的結尾 [[:<:]] 詞的開始 [[:>:]]詞的結尾
SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\\.]'
ORDER BY prod_name;
# ^在括號內是否認該集合,在外面就是定位符
# 用^開頭,$結尾能夠使得REGEXP等價於LIKE
相關文章
相關標籤/搜索