首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 正則表達式 REGEXP 完整語法與實用範例

     編輯:MySQL 綜合教學

基本用法

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

元字符速查表

元字符說明範例
.任意單字符'.000' 匹配 1.000, 2.000
|OR 邏輯'1000|2000'
[...]字符集合'[123]ton' 匹配 1ton, 2ton, 3ton
[^...]排除字符集合'[^0-9]' 非數字
\\轉義(MySQL 需雙反斜線)'\\.000' 匹配字面 .000
^字符串開頭(集合外)'^abc'
$字符串結尾'abc$'
[[:<:]單詞開頭'[[:<:]]word'
[[:>:]]單詞結尾'word[[:>:]]'

POSIX 字符類別

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

使用時外層加方括號:REGEXP '[[:digit:]]'

量詞

量詞說明
*0 次或多次
+1 次或多次
?0 次或 1 次
{n}恰好 n 次
{n,}至少 n 次
{n,m}n 到 m 次 (m ≤ 255)

實用範例

-- 1. 以數字開頭的產品名
SELECT * FROM products WHERE prod_name REGEXP '^[0-9]';

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

-- 3. 郵箱格式簡易驗證
SELECT * FROM users WHERE email REGEXP '^[[:alnum:]_.-]+@[[:alnum:]-]+\\.[[:alpha:]]{2,}$';

-- 4. 手機號 (中國大陸)
SELECT * FROM users WHERE mobile REGEXP '^1[3-9]\\d{9}$';

-- 5. 排除特定字符
SELECT * FROM products WHERE prod_name REGEXP '[^a-zA-Z0-9]';

效能提醒

  • REGEXP 無法使用索引,全表掃描
  • 大表建議:應用層預處理、全文索引、或導出至 Elasticsearch
  • 簡單前綴匹配優先用 LIKE 'prefix%' 走索引
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved