MySQL中正則表達(dá)式用法示例詳解
MySQL 中正則表達(dá)式通過 REGEXP 或 RLIKE 操作符實(shí)現(xiàn)(兩者等價(jià)),用于在 WHERE 子句中進(jìn)行復(fù)雜的字符串模式匹配。以下是核心用法和示例:
一、基礎(chǔ)語法
SELECT column_name FROM table_name WHERE column_name REGEXP 'pattern'; -- 或 WHERE column_name RLIKE 'pattern';
二、常用元字符
| 元字符 | 說明 | 示例 |
|---|---|---|
^ | 匹配開頭 | '^a' → 以 “a” 開頭 |
$ | 匹配結(jié)尾 | 'z$' → 以 “z” 結(jié)尾 |
. | 匹配任意單個(gè)字符 | 'a.c' → “abc”, “axc” |
[...] | 字符集合 | '[aeiou]' → 匹配任一元音 |
[^...] | 排除字符集合 | '[^0-9]' → 非數(shù)字字符 |
* | 前一個(gè)字符0次或多次 | 'ab*c' → “ac”, “abbc” |
+ | 前一個(gè)字符1次或多次 | 'ab+c' → “abc”, “abbc” (排除"ac") |
{n} | 前一個(gè)字符n次 | 'a{3}' → “aaa” |
| | 或操作 | 'cat|dog' → “cat” 或 “dog” |
三、實(shí)際示例
匹配以數(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ù)重復(fù)字符
SELECT word FROM dictionary WHERE word REGEXP '(.)\\1'; -- 如 "book"('oo')
四、與 LIKE 的區(qū)別
| 特性 | REGEXP | LIKE |
|---|---|---|
| 功能 | 復(fù)雜模式匹配 | 簡(jiǎn)單通配符 (%, _) |
| 大小寫敏感 | 默認(rèn)不敏感(除非二進(jìn)制字符串) | 依賴字段排序規(guī)則 |
| 性能 | 通常較慢(全表掃描) | 可能使用索引 |
五、進(jìn)階函數(shù)(MySQL 8.0+)
REGEXP_REPLACE()
替換匹配的字符串:
SELECT REGEXP_REPLACE('hello 123', '[0-9]+', 'world'); -- 結(jié)果: 'hello world'REGEXP_SUBSTR()
提取匹配的子串:
SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+'); -- 結(jié)果: 'abc'REGEXP_INSTR()
返回匹配的起始位置:
SELECT REGEXP_INSTR('abc123', '[0-9]+'); -- 結(jié)果: 4六、注意事項(xiàng)
- 轉(zhuǎn)義特殊字符:使用雙反斜杠
\\(如\\+,\\.)。 - 性能優(yōu)化:避免在大型表上使用
REGEXP,優(yōu)先考慮全文索引或預(yù)處理。 - 大小寫敏感:如需區(qū)分大小寫,使用
BINARY關(guān)鍵字:
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。
到此這篇關(guān)于MySQL中正則表達(dá)式用法的文章就介紹到這了,更多相關(guān)mysql正則表達(dá)式用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL觸發(fā)器的使用和優(yōu)缺點(diǎn)介紹
大家好,本篇文章主要講的是MySQL觸發(fā)器的使用和優(yōu)缺點(diǎn)介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下哦,方便下次瀏覽2021-12-12
mysql出現(xiàn)Error performing load command的解決方法
一般就是數(shù)據(jù)庫表字段類型問題,大家參考下面的方法解決下2008-06-06
MySQL數(shù)據(jù)遷移相關(guān)總結(jié)
這篇文章主要介紹了MySQL數(shù)據(jù)遷移的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2021-04-04
MySQL curdate()函數(shù)的實(shí)例詳解
這篇文章主要介紹了MySQL curdate()函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家理解應(yīng)用MysqL curdate()的使用方法,需要的朋友可以參考下2017-09-09
解決mysql @@sql_mode問題---only_full_group_by
這篇文章主要介紹了解決mysql @@sql_mode問題---only_full_group_by,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09
一文詳解Mysql?insert也會(huì)發(fā)生死鎖嗎
死鎖的本質(zhì)是資源競(jìng)爭(zhēng),批量插入如果順序不一致很容易導(dǎo)致死鎖,這篇文章主要給大家介紹了關(guān)于Mysql?insert是否也會(huì)發(fā)生死鎖的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
MySQL分頁Limit的優(yōu)化過程實(shí)戰(zhàn)
在mysql中進(jìn)行分頁查詢時(shí),一般會(huì)使用limit查詢,下面這篇文章主要給大家介紹了關(guān)于MySQL分頁Limit優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
Mysql中事務(wù)ACID的實(shí)現(xiàn)原理詳解
這篇文章主要給大家介紹了關(guān)于Mysql中事務(wù)ACID實(shí)現(xiàn)原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

