正規表示式工具 |
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 和部落格 |
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。這是一個 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 |
頁面 URL:https://regular-expressions.dev.org.tw/mysql.html
頁面最後更新:2021 年 8 月 24 日
網站最後更新:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。