MySQL中正則表達式用法示例詳解
MySQL 中正則表達式通過 REGEXP 或 RLIKE 操作符實現(xiàn)(兩者等價),用于在 WHERE 子句中進行復雜的字符串模式匹配。以下是核心用法和示例:
一、基礎語法
SELECT column_name FROM table_name WHERE column_name REGEXP 'pattern'; -- 或 WHERE column_name RLIKE 'pattern';
二、常用元字符
| 元字符 | 說明 | 示例 |
|---|---|---|
^ | 匹配開頭 | '^a' → 以 “a” 開頭 |
$ | 匹配結尾 | 'z$' → 以 “z” 結尾 |
. | 匹配任意單個字符 | 'a.c' → “abc”, “axc” |
[...] | 字符集合 | '[aeiou]' → 匹配任一元音 |
[^...] | 排除字符集合 | '[^0-9]' → 非數(shù)字字符 |
* | 前一個字符0次或多次 | 'ab*c' → “ac”, “abbc” |
+ | 前一個字符1次或多次 | 'ab+c' → “abc”, “abbc” (排除"ac") |
{n} | 前一個字符n次 | 'a{3}' → “aaa” |
| | 或操作 | 'cat|dog' → “cat” 或 “dog” |
三、實際示例
匹配以數(shù)字開頭的字符串
SELECT name FROM products WHERE name REGEXP '^[0-9]';
匹配包含特定單詞的文本
SELECT content FROM logs WHERE content REGEXP 'error|warning';
匹配郵箱格式
SELECT email FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$';匹配連續(xù)重復字符
SELECT word FROM dictionary WHERE word REGEXP '(.)\\1'; -- 如 "book"('oo')
四、與 LIKE 的區(qū)別
| 特性 | REGEXP | LIKE |
|---|---|---|
| 功能 | 復雜模式匹配 | 簡單通配符 (%, _) |
| 大小寫敏感 | 默認不敏感(除非二進制字符串) | 依賴字段排序規(guī)則 |
| 性能 | 通常較慢(全表掃描) | 可能使用索引 |
五、進階函數(shù)(MySQL 8.0+)
REGEXP_REPLACE()
替換匹配的字符串:
SELECT REGEXP_REPLACE('hello 123', '[0-9]+', 'world'); -- 結果: 'hello world'REGEXP_SUBSTR()
提取匹配的子串:
SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+'); -- 結果: 'abc'REGEXP_INSTR()
返回匹配的起始位置:
SELECT REGEXP_INSTR('abc123', '[0-9]+'); -- 結果: 4六、注意事項
- 轉義特殊字符:使用雙反斜杠
\\(如\\+,\\.)。 - 性能優(yōu)化:避免在大型表上使用
REGEXP,優(yōu)先考慮全文索引或預處理。 - 大小寫敏感:如需區(qū)分大小寫,使用
BINARY關鍵字:
WHERE BINARY column_name REGEXP 'Pattern';
經(jīng)典案例:提取文本中的金額
SELECT
REGEXP_SUBSTR(description, '[0-9]+\\.[0-9]{2}') AS amount
FROM orders
WHERE description REGEXP '[0-9]+\\.[0-9]{2}';匹配如 "Price: 99.99 USD" 中的 99.99。
到此這篇關于MySQL中正則表達式用法的文章就介紹到這了,更多相關mysql正則表達式用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mysql出現(xiàn)Error performing load command的解決方法
一般就是數(shù)據(jù)庫表字段類型問題,大家參考下面的方法解決下2008-06-06
解決mysql @@sql_mode問題---only_full_group_by
這篇文章主要介紹了解決mysql @@sql_mode問題---only_full_group_by,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-09-09
MySQL分頁Limit的優(yōu)化過程實戰(zhàn)
在mysql中進行分頁查詢時,一般會使用limit查詢,下面這篇文章主要給大家介紹了關于MySQL分頁Limit優(yōu)化的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-09-09

