快速入門
教學
工具和語言
範例
參考
書籍評論
正規表示式工具
grep
PowerGREP
RegexBuddy
RegexMagic
一般應用程式
EditPad Lite
EditPad Pro
語言和函式庫
Boost
Delphi
GNU (Linux)
Groovy
Java
JavaScript
.NET
PCRE (C/C++)
PCRE2 (C/C++)
Perl
PHP
POSIX
PowerShell
Python
R
Ruby
std::regex
Tcl
VBScript
Visual Basic 6
wxWidgets
XML Schema
Xojo
XQuery 和 XPath
XRegExp
資料庫
MySQL
Oracle
PostgreSQL
本網站的更多資訊
簡介
正規表示式快速入門
正規表示式教學
取代字串教學
應用程式和語言
正規表示式範例
正規表示式參考
取代字串參考
書籍評論
可列印 PDF
關於本網站
RSS Feed 和部落格
RegexBuddy—The best regex editor and tester for MySQL developers!

MySQL 正則表示式與 REGEXP 算子

MySQL 對正規表示式的支援相當有限,但仍然非常有用。MySQL 僅有一個算子可讓您使用正規表示式。這是 REGEXP 算子,其運作方式就像 LIKE 算子,只不過它不使用 _% 萬用字元,而是使用 POSIX 延伸正規表示式 (ERE)。儘管標準名稱中含有「延伸」,但 POSIX ERE 風格在現代標準中是一種相當基本的正規表示式風格。儘管如此,它讓 REGEXP 算子比簡單的 LIKE 算子強大且靈活許多。

LIKE 和 REGEXP 算子之間的一個重要差異是,只有當樣式與整個字串相符時,LIKE 算子才會傳回 True。例如,WHERE testcolumn LIKE 'jg' 只會傳回 testcolumn 與 jg 相同的列,除了可能大小寫不同。另一方面,WHERE testcolumn REGEXP 'jg' 會傳回 testcolumn 在字串中任何位置都有 jg 的所有列。使用 WHERE testcolumn REGEXP '^jg$' 僅取得與 jg 相同的欄。等同於 WHERE testcolumn LIKE 'jg%' 的會是 WHERE testcolumn REGEXP '^jg'。不需要在正規表示式的結尾加上 .*(REGEXP 等同於 LIKE 的 %),因為接受部分相符。

MySQL 不提供任何 相符模式。POSIX ERE 不支援正規表示式內的模式修改器,而 MySQL 的 REGEXP 算子不提供在正規表示式外指定模式的方式。 會相符所有字元,包括換行符,而 插入符號和美元符號 僅會在字串的最開始和最後相符。換句話說:MySQL 將換行字元視為一般字元。如果資料表的校對是大小寫不敏感的,則 REGEXP 算子會以大小寫不敏感的方式套用正規表示式,這是預設值。如果您將校對變更為大小寫敏感,則 REGEXP 算子會變成大小寫敏感。

請記住,MySQL 支援字串中的 C 式跳脫序列。儘管 POSIX ERE 不支援 \n 等代碼來比對換行等不可列印字元,MySQL 卻支援字串中的此跳脫。因此,WHERE testcolumn REGEXP '\n' 會傳回 testcolumn 中包含換行的所有列。MySQL 會在剖析正規表示式之前,將字串中的 \n 轉換成單一換行字元。這也表示反斜線需要跳脫。比對單一反斜線的正規表示式 \\ 在 MySQL 字串中會變成 '\\\\',而比對美元符號的正規表示式 \$ 在 MySQL 字串中會變成 '\\$'。這與其他資料庫(例如 Oracle)不同,後者不支援 \n,也不需要跳脫反斜線。

若要傳回欄位與正規表示式不符的列,請使用 WHERE testcolumn NOT REGEXP 'pattern'。RLIKE 算子是 REGEXP 算子的同義詞。WHERE testcolumn RLIKE 'pattern'WHERE testcolumn NOT RLIKE 'pattern'WHERE testcolumn REGEXP 'pattern'WHERE testcolumn NOT REGEXP 'pattern' 相同。我建議您使用 REGEXP 而非 RLIKE,以避免與 LIKE 算子混淆。

LIB_MYSQLUDF_PREG

如果您想要在資料庫中擁有更強大的正規表示式,可以考慮使用 LIB_MYSQLUDF_PREG。這是一個 MySQL 使用者函數的開放原始碼函式庫,用於匯入 PCRE 函式庫。LIB_MYSQLUDF_PREG 僅以原始碼形式提供。若要使用它,您需要能夠將其編譯並安裝到您的 MySQL 伺服器中。安裝此函式庫不會以任何方式變更 MySQL 內建的正規表示式支援。它僅提供下列其他函數

PREG_CAPTURE 從字串中萃取正規表示式比對。PREG_POSITION 傳回正規表示式比對字串的位置。PREG_REPLACE 對字串執行搜尋並取代。PREG_RLIKE 測試正規表示式是否比對字串。

所有這些函數都將正規表示式作為其第一個參數。此正規表示式必須格式化為 Perl 正規表示式運算子。例如,要測試 regex 是否與主旨不分大小寫地匹配,您會使用 MySQL 程式碼 PREG_RLIKE('/regex/i', subject)。這類似於 PHP 的 preg 函數,它也需要 PHP 字串內正規表示式的額外 // 分隔符號。

| 快速入門 | 教學 | 工具和語言 | 範例 | 參考 | 書籍評論 |

| grep | PowerGREP | RegexBuddy | RegexMagic |

| EditPad Lite | EditPad Pro |

| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML Schema | Xojo | XQuery 和 XPath | XRegExp |

| MySQL | Oracle | PostgreSQL |