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

MySQL 正則表達式 REGEXP 完整指南:元字符、量詞、字符類、定位符與實戰案例

     編輯:MySQL 綜合教學

MySQL 正則表達式 REGEXP 完整指南:元字符、量詞、字符類、定位符與實戰案例

MySQL REGEXP(或 RLIKE)支援 POSIX 正則表達式,比 LIKE 強大得多,可實現複雜模式匹配。本文系統梳理元字符、量詞、預定義字符類、定位符,並以 products 表為例演示。

示例表數據

products 表

1. 基本字符匹配

  • WHERE prod_name REGEXP '1000':包含字面字符串 1000 的行。
  • WHERE prod_name REGEXP '.000':. 匹配任意單字符,等效 _。

基本匹配 點號匹配

2. 多選分支 |(OR)

WHERE prod_name REGEXP '1000|2000|3000'

匹配包含 1000 或 2000 或 3000 的行。可鏈接任意多條件。

OR 分支

3. 字符集合 []:匹配集合中任一字符

  • [123] 匹配 1、2、3 中任一。
  • [1-5] 等價 [12345],範圍寫法。
  • [0-9] 匹配任意數字。

需求:匹配 1 Ton 或 2 Ton 或 3 Ton:

WHERE prod_name REGEXP '[123] Ton'

錯誤寫法:[1|2|3] Ton 會匹配字面字符 |。

正確字符集 錯誤寫法

4. 量詞:控制重複次數

元字符含義
*0 次或多次
+1 次或多次
?0 次或 1 次
{n}恰好 n 次
{n,}至少 n 次
{n,m}n 到 m 次

示例:匹配右括號 + 數字 + 空格 + sticks + 可選左括號:

WHERE prod_name REGEXP '\\)[0-9] sticks\\('

量詞示例

5. 預定義字符類(POSIX)

類等價說明
[:alpha:][A-Za-z]字母
[:digit:][0-9]數字
[:alnum:][A-Za-z0-9]字母數字
[:lower:][a-z]小寫字母
[:upper:][A-Z]大寫字母
[:space:][ \t\r\n\v\f]空白字符
[:punct:]標點符號
[:blank:][ \t]空格和製表符
[:cntrl:]控制字符
[:graph:]可打印非空白
[:print:]可打印含空白

查找產品名含連續 4 個數字:

WHERE prod_name REGEXP '[[:digit:]]{4}'

字符類示例

6. 定位符:錨定位置

元字符含義
^字符串開頭
$字符串結尾
[[:<:]]詞開頭
[[:>:]]詞結尾

查找以數字或點開頭的產品名:

WHERE prod_name REGEXP '^[0-9.]'

定位符示例

7. 轉義特殊字符

正則元字符(. * + ? ^ $ ( ) [ ] { } | \)需雙反斜杠轉義:\\.、\\*、\\\\。

轉義示例

性能提示

  • REGEXP 無法使用索引,大表全掃描極慢。必要時改用全文索引或應用層預過濾。
  • MySQL 8.0 引入 REGEXP_LIKE()、REGEXP_SUBSTR()、REGEXP_REPLACE(),功能更豐富。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved