萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL REGEXP 正則表達式完整語法與實戰速查

基本用法

SELECT prod_name FROM products WHERE prod_name REGEXP 'pattern';
  • 預設不區分大小寫,需區分加 BINARY:REGEXP BINARY 'Pattern'。
  • REGEXP 在欄值內部匹配,LIKE 整欄匹配。

元字元速查表

元字元說明範例
.任意單字元'.000' 匹配 1.000, 2.000
|OR'1000|2000'
[...]字元類別'[123]ton' 匹配 1ton,2ton,3ton
[^...]排除類別'[^0-9]' 非數字
*0 或多次
+1 或多次
?0 或 1 次
{n}恰好 n 次
{n,}至少 n 次
{n,m}n 到 m 次 (m≤255)'[0-9]{1,3}'
^字串開頭'^王'
$字串結尾'ing$'
[[:<:]]詞首邊界
[[:>:]]詞尾邊界

POSIX 字元類別(需雙層括號)

類別等價說明
[[:alnum:]][a-zA-Z0-9]字母數字
[[:alpha:]][a-zA-Z]字母
[[:digit:]][0-9]數字
[[:lower:]][a-z]小寫
[[:upper:]][A-Z]大寫
[[:space:]][ \t\n\r\f\v]空白字元
[[:xdigit:]][a-fA-F0-9]十六進制

實戰範例

-- 1. 匹配產品名含 .000
SELECT prod_name FROM products WHERE prod_name REGEXP '\\.000';

-- 2. 價格 1000 或 2000
SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000';

-- 3. 以數字開頭的名稱
SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9]';

-- 4. 包含連續 1-3 位數字
SELECT prod_name FROM products WHERE prod_name REGEXP '[0-9]{1,3}';

效能提醒

REGEXP 導致全表掃描,大表慎用。可考慮:前綴 LIKE 過濾 → 應用層正則;或 MySQL 8.0 函數索引;或匯出至 Elasticsearch 全文檢索。

copyright © 萬盛學電腦網 all rights reserved