mysql正則函數(shù)REGEXP使用及說明
在 MySQL 中,REGEXP 是用于正則表達式模式匹配的操作符,其功能與 RLIKE 相同。
從 MySQL 8.0 開始,還引入了更規(guī)范的函數(shù)形式如 REGEXP_LIKE()、REGEXP_SUBSTR()、REGEXP_REPLACE() 等,增強了正則處理能力。
核心要點
基本語法
column_name REGEXP ‘pattern’:返回 1(匹配)或 0(不匹配)。
默認不區(qū)分大小寫,但受字段排序規(guī)則(collation)影響;若需區(qū)分大小寫,可使用 BINARY 或 REGEXP_LIKE(…, ‘c’)。
支持的元字符與量詞(基于 Henry Spencer 正則庫,POSIX ERE 子集):
^、$、.、*、+、?、[]、|、{n}、{n,}、{n,m}
不支持 \d、\w、\s 等 Perl 風格簡寫,應分別用 [0-9]、[a-zA-Z0-9]、[[:space:]] 替代。
版本差異
MySQL 5.7 及以下:僅支持基本 POSIX BRE,部分語法(如 +、?)需轉(zhuǎn)義或改用 {1,}、{0,1}。
MySQL 8.0+:采用 ICU 引擎,支持更多 POSIX ERE 特性,推薦使用 REGEXP_LIKE() 等函數(shù)以提高可讀性和控制力。
常用函數(shù)與示例
REGEXP_LIKE()(MySQL 8.0+)
SELECT * FROM users WHERE REGEXP_LIKE(email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$', 'c');
REGEXP_SUBSTR()(MySQL 8.0+)
提取首次匹配的子串
SELECT REGEXP_SUBSTR('user_123_order_456', '[0-9]+', 1, 1); -- 返回 '123'
REGEXP_REPLACE()(MySQL 8.0+)
替換匹配內(nèi)容
SELECT REGEXP_REPLACE('abc123def', '[0-9]+', ''); -- 返回 'abcdef'
REGEXP_INSTR()(MySQL 8.0+)
返回匹配位置(從 1 開始)
SELECT REGEXP_INSTR('dog cat dog', 'dog'); -- 返回 1
SELECT REGEXP_INSTR('dog cat dog', 'dog', 2); -- 返回 9(從第2個字符開始找第二次匹配)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
redis服務器環(huán)境下mysql實現(xiàn)lnmp架構緩存
這篇文章主要介紹了redis系統(tǒng)環(huán)境下mysql實現(xiàn)lnmp架構緩存,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07
MySQL 數(shù)據(jù)庫兩臺主機同步實戰(zhàn)(linux)
MySQL支持單向、異步復制,復制過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日志文件,并維護日志文件的一個索引以跟蹤日志循環(huán)。2009-04-04
mysql出現(xiàn)ERROR?2003?(HY000):?Can‘t?connect?to?MySQL?ser
本文主要介紹了mysql出現(xiàn)ERROR?2003?(HY000):?Can‘t?connect?to?MySQL?server?on?‘localhost‘?(10061)的解決方法,具有一定的參考價值,感興趣的可以了解一下2025-03-03

