首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 正則表達式 REGEXP 進階實戰:字元類、量詞、邊界、轉義、POSIX 標準與 8.0 新函數

     編輯:MySQL 資料庫相關知識

MySQL REGEXP (別名 RLIKE) 支援 POSIX 1003.2 正則標準。本文系統整理 8 大核心語法類別、POSIX 字元類對照表、量詞貪婪/非貪婪、邊界斷言、雙重轉義規則,並預覽 MySQL 8.0 新增 REGEXP_REPLACE/SUBSTR/INSTR 三大函數。

8 大核心語法速查

類別語法說明範例
基本字元.任意單一字元 (含換行需 s 修飾符 8.0+)'a.c' REGEXP 'a.c'
\\轉義 (MySQL 字串需雙重 \\\\)'1.0' REGEXP '1\\.0'
字元集合[abc]任一字元'ton' REGEXP '[123]ton'
[a-z]範圍'a1' REGEXP '[a-z][0-9]'
[^abc]排除'abc' REGEXP '[^d]'
POSIX 字元類[[:digit:]]數字 [0-9]'name1' REGEXP 'name[[:digit:]]'
[[:alpha:]]字母 [A-Za-z]同上
量詞* + ? {n} {n,} {n,m}0*/1+/0-1/定長/下限/範圍 (m≤255)'100' REGEXP '[0-9]{1,3}'
邊界斷言^ $ [[:<:]] [[:>:]]行首/行尾/單詞首/單詞尾'hello' REGEXP '^[[:<:]]hel'
分組/替換() |捕獲組/或邏輯 (MySQL 不支援反向引用 \1)'cat' REGEXP 'cat|dog'
大小寫控制BINARY區分大小寫'Abc' REGEXP BINARY '^a' 不匹配

POSIX 字元類完整對照

類別等價說明
[[:alnum:]][A-Za-z0-9]字母數字
[[:alpha:]][A-Za-z]字母
[[:blank:]][ \t]空格製表
[[:cntrl:]]ASCII 0-31,127控制字元
[[:digit:]][0-9]數字
[[:graph:]][[:print:]] 扣空格可見字元
[[:lower:]][a-z]小寫
[[:print:]]可列印字元含空格
[[:punct:]]標點符號非字母數字非控制
[[:space:]][ \t\n\r\f\v]空白字元
[[:upper:]][A-Z]大寫
[[:xdigit:]][A-Fa-f0-9]十六進位

MySQL 8.0 正則新函數 (里程碑)

函數語法用途範例
REGEXP_LIKEREGEXP_LIKE(expr, pat[, match_type])替代 REGEXP,支援 c/i/m/n 模式修飾符REGEXP_LIKE(col, '^abc$', 'c')
REGEXP_SUBSTRREGEXP_SUBSTR(expr, pat[, pos[, occ[, match_type]]])擷取匹配子串REGEXP_SUBSTR('abc123def', '[0-9]+') → '123'
REGEXP_INSTRREGEXP_INSTR(expr, pat[, pos[, occ[, match_type]]])回傳匹配位置REGEXP_INSTR('abc123', '[0-9]+') → 4
REGEXP_REPLACEREGEXP_REPLACE(expr, pat, repl[, pos[, occ[, match_type]]])正則替換REGEXP_REPLACE('a1b2', '[0-9]', 'X') → 'aXbX'

效能警示

  • REGEXP 全表掃描,無法使用 B-Tree 索引 (8.0 可建 Functional Index 部分支援)。
  • 大表務必先用 LIKE 'prefix%' 過濾再套用正則。
  • 複雜正則在應用層 (Python re, Java Pattern) 處理更靈活高效。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved