MySQL 正則表達式詳細說明

目錄

MySQL 正則表達式詳細說明

1. 基本操作符:REGEXP 和 RLIKE

2. 常用正則表達式模式

3. MySQL 正則表達式函數(MySQL 8.0+)

4. 示例查詢

5. 注意事項

6. 總結


MySQL 正則表達式詳細說明

MySQL 支持正則表達式(Regular Expression),用于在查詢中進行復雜的模式匹配。它主要通過 REGEXPRLIKE 操作符實現(兩者功能相同),以及 MySQL 8.0 及以上版本提供的擴展函數。以下內容將逐步解釋其用法、模式和注意事項。

1. 基本操作符:REGEXP 和 RLIKE
  • REGEXPRLIKE 是等價的,用于在 WHERE 子句中匹配字符串模式。
  • 語法示例:
    SELECT * FROM 表名 WHERE 列名 REGEXP '模式';
    

  • 如果匹配成功,返回 1(真);否則返回 0(假)。
  • 示例:查詢所有以 "a" 開頭的用戶名。
    SELECT * FROM users WHERE username REGEXP '^a';
    

2. 常用正則表達式模式

MySQL 正則表達式基于 POSIX 擴展正則表達式(ERE)標準。以下是常見元字符和模式:

  • 基本匹配
    • .:匹配任意單個字符(除換行符外),例如 'a.c' 匹配 "abc" 或 "aac"。
    • ^:匹配字符串開頭,例如 '^start' 匹配以 "start" 開頭的字符串。
    • $:匹配字符串結尾,例如 'end$' 匹配以 "end" 結尾的字符串。
  • 字符類
    • [abc]:匹配 "a"、"b" 或 "c" 中的任意一個字符。
    • [^abc]:匹配除 "a"、"b"、"c" 外的任意字符。
    • [a-z]:匹配任意小寫字母。
  • 量詞(控制匹配次數):
    • *:匹配前一個元素零次或多次,例如 'ab*c' 匹配 "ac"、"abc"、"abbc" 等。
    • +:匹配前一個元素一次或多次,例如 'ab+c' 匹配 "abc"、"abbc",但不匹配 "ac"。
    • ?:匹配前一個元素零次或一次,例如 'ab?c' 匹配 "ac" 或 "abc"。
    • {n}:匹配前一個元素恰好 $n$ 次,例如 'a{3}' 匹配 "aaa"。
    • {n,}:匹配前一個元素至少 $n$ 次,例如 'a{2,}' 匹配 "aa"、"aaa" 等。
    • {n,m}:匹配前一個元素 $n$ 到 $m$ 次,例如 'a{2,4}' 匹配 "aa"、"aaa" 或 "aaaa"。
  • 分組和或操作
    • |:表示“或”,例如 'apple|banana' 匹配 "apple" 或 "banana"。
    • ():用于分組,例如 '(ab)+' 匹配 "ab"、"abab" 等。
  • 轉義字符
    • 使用 \\ 轉義特殊字符,例如 '\\.' 匹配字面點號 "."。
3. MySQL 正則表達式函數(MySQL 8.0+)

從 MySQL 8.0 開始,引入了更強大的函數:

  • REGEXP_LIKE():檢查是否匹配模式,語法 REGEXP_LIKE(字符串, '模式')
    SELECT REGEXP_LIKE('hello', '^h') AS result; -- 返回 1
    

  • REGEXP_INSTR():返回匹配子串的起始位置,語法 REGEXP_INSTR(字符串, '模式')
    SELECT REGEXP_INSTR('abc123', '[0-9]+') AS position; -- 返回 4(數字起始位置)
    

  • REGEXP_SUBSTR():提取匹配的子串,語法 REGEXP_SUBSTR(字符串, '模式')
    SELECT REGEXP_SUBSTR('email: test@example.com', '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}') AS email; -- 返回 "test@example.com"
    

  • REGEXP_REPLACE():替換匹配的子串,語法 REGEXP_REPLACE(字符串, '模式', '替換文本')
    SELECT REGEXP_REPLACE('Phone: 123-456', '[0-9]{3}-[0-9]{3}', '***-***') AS masked; -- 返回 "Phone: ***-***"
    

4. 示例查詢
  • 匹配數字序列:查詢包含至少 3 位數字的字符串。
    SELECT * FROM data WHERE content REGEXP '[0-9]{3,}';
    

  • 驗證郵箱格式:檢查是否符合標準郵箱模式。
    SELECT * FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$';
    

  • 提取和替換:在 MySQL 8.0 中,提取日期部分。
    SELECT REGEXP_SUBSTR('2023-10-05 event', '[0-9]{4}-[0-9]{2}-[0-9]{2}') AS date; -- 返回 "2023-10-05"
    

5. 注意事項
  • 區分大小寫:MySQL 默認不區分大小寫。如需區分,使用 BINARY 關鍵字或 REGEXP_LIKE 的選項,例如 REGEXP_LIKE(str, 'pattern', 'c')('c' 表示大小寫敏感)。
  • 性能影響:正則表達式比簡單 LIKE 查詢更慢,避免在大表上頻繁使用。優先考慮索引或全文搜索。
  • 版本兼容性
    • REGEXP/RLIKE 支持所有 MySQL 版本。
    • 高級函數(如 REGEXP_REPLACE)僅限 MySQL 8.0+。
    • 舊版本(如 MySQL 5.7)可能不支持某些模式(如 Unicode 字符類)。
  • 轉義規則:在 SQL 字符串中,需雙重轉義特殊字符。例如,匹配點號使用 '\\.',而非單反斜杠。
  • 錯誤處理:無效模式會導致查詢錯誤。測試模式前,可使用簡單值驗證。
6. 總結

MySQL 正則表達式提供靈活的文本匹配能力,適用于數據驗證、清洗和提取。核心操作符 REGEXP 適用于基礎匹配,而 MySQL 8.0+ 的函數擴展了功能。使用時,注意模式語法、性能優化和版本限制。推薦先在小型數據集上測試模式,再應用到生產環境。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92323.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++之 棧淺析

C之棧淺析 概要 通過可視化游戲梳理棧特點以及棧操作方式. 學習棧的工作原理就像往糖果罐里放糖果和拿糖果一樣簡單! 棧特點 先進后出 技術名詞解釋 LIFO LIFO -> Last In, First Out 后進先出 可視化小游戲 游戲傳送門

C++ 算術函子

在 C 中&#xff0c;算術函子&#xff08;Arithmetic Functors&#xff09; 是標準庫 <functional> 中提供的一組函數對象&#xff0c;用于封裝基本的算術運算&#xff08;如加、減、乘、除等&#xff09;。它們本質上是類模板&#xff0c;重載了 operator()&#xff0c;…

Flutter 事件總線 Event Bus

文章目錄概要核心原理基本使用步驟優點注意事項適用場景小結概要 提示&#xff1a;這里可以添加技術概要 event_bus 是一個常用的第三方庫&#xff0c;用于實現跨組件 / 跨頁面的事件通信&#xff0c;基于發布 - 訂閱模式&#xff08;Publish-Subscribe Pattern&#xff09;工…

數據庫管理系統:入門需要了解的內容

數據庫管理系統&#xff1a;數字化時代的基石 在信息技術飛速發展的今天&#xff0c;我們生活在一個被數據包圍的世界里。從日常使用的社交媒體、電商平臺&#xff0c;到企業運營的核心業務系統&#xff0c;再到政府部門的政務管理&#xff0c;數據無處不在。而數據庫管理系統&…

安裝CST時,報錯問題處理

今天安裝這個軟件的時候&#xff0c;發現一個問題一直處理不了&#xff0c;然后看網上的一些解決方法&#xff0c;最終得到處理&#xff0c;這里就簡單記錄下解決方法。問題&#xff1a;處理方案&#xff1a;1.問題原因&#xff1a;crack中的CST Studio Suite 2022未配置成功。…

分治-快排-215.數組中的第k個最大元素-力扣(LeetCode)

一、題目解析1、需返回排序好的第k個最大元素2、要求時間復雜度為O(N)二、算法原理解法1&#xff1a;堆排序(大根堆) k*O(N)借用大堆的性質&#xff0c;將元素插入到大堆中&#xff0c;按照k輸出堆頂第k個元素解法2&#xff1a;堆排序(小根堆) (N-k)*O(logN)先建k個小堆&#x…

新手向:Python實現圖片轉ASCII藝術

Python實現圖片轉ASCII藝術&#xff1a;從零開始的完整指南Python實現圖片轉ASCII藝術的技術解析ASCII藝術是一種使用字符組合來表現圖像的技術&#xff0c;這種技術源于早期計算機顯示器的圖形限制&#xff0c;如今已成為一種獨特的數字藝術形式。ASCII藝術的應用場景十分廣泛…

6.類與對象(二)

總結 本章寫了封裝、static成員以及代碼塊。 一、封裝 1.封裝的概念 封裝簡單來說就是被密封起來&#xff08;不讓我們看見的東西&#xff09;&#xff0c;即被隱藏。 對于用戶來說&#xff0c;并不需要關心的類&#xff0c;所實現的細節就會被封裝&#xff08;隱藏&#x…

流形折疊與條件機制

1. 為什么要防止流形折疊&#xff08;mode collapse&#xff09; 流形折疊 生成器只學會輸出極少數甚至單一模式&#xff08;mode&#xff09;的樣本&#xff0c;而完全忽略數據分布的多樣性。 后果一句話&#xff1a;“模型看起來生成了很多圖&#xff0c;其實都在重復同一張…

《從零構建大語言模型》學習筆記2,文本數據處理1(以及tiktoken庫無法下載gpt2參數,調用get_encoding時SSL超時的解決方法)

《從零構建大語言模型》學習筆記2&#xff0c;文本數據處理1 文章目錄《從零構建大語言模型》學習筆記2&#xff0c;文本數據處理1前言1、分詞2.將把提取出來的詞元轉換為數字ID3.添加特殊上下文標記4. 字節對編碼&#xff08;以及tiktoken庫無法下載gpt2參數&#xff0c;調用g…

【AI工具】解放雙手,操控瀏覽器的工具對比,來了

&#x1f4d2;前言在github上面&#xff0c;有幾個操作瀏覽器的mcp工具&#xff1a;browser-use / browser-usemicrosoft / playwright-mcpAgentDeskAI / browser-tools-mcphangwin / mcp-chrome想知道他們的區別嗎&#xff0c;想知道那個更適合你嗎&#xff0c;想。。。&#…

Linux 操作系統基礎知識總結

1、操作系統總體介紹 CPU&#xff1a; 就像人的大腦&#xff0c;主要負責相關事情的判斷以及實際處理的機制。 查詢指令&#xff1a; cat /proc/cpuinfo 內存&#xff1a; 大腦中的記憶區塊&#xff0c;將皮膚、眼睛等所收集到的信息記錄起來的地方&#xff0c;以供CPU進行判斷…

cudagraph 本質詳解

理解 CUDA Graph 的本質,關鍵在于理解它解決了什么問題,以及它通過什么機制來解決這個問題。 一、 核心問題:傳統 CUDA 編程的“CPU 瓶頸” 在 CUDA Graph 出現之前,我們通常使用 CUDA Stream 來向 GPU 提交任務。這是一個動態的過程: CPU 作為指揮官:CPU 循環地、逐條…

Spring MVC 父子容器深度解析:原理、實戰與優化

1. 父子容器的定義與設計初衷一句話總結&#xff1a;父子容器的核心價值在于解耦 Web 層與業務層&#xff0c;實現職責分離與上下文隔離。1.1 父子容器的層次關系在 Spring MVC 中&#xff0c;容器分為兩類&#xff1a;父容器&#xff08;Root ApplicationContext&#xff09;&…

AI賦能SEO關鍵詞優化策略

內容概要 人工智能&#xff08;AI&#xff09;技術正深刻改變著搜索引擎優化&#xff08;SEO&#xff09;的實踐方式&#xff0c;尤其在關鍵詞研究這一核心領域帶來了革命性的影響。本文聚焦于AI如何賦能SEO關鍵詞優化策略&#xff0c;系統性地探討其核心價值與應用路徑。我們將…

虛擬機Ubuntu圖形化界面root用戶登錄錯誤

當在 Ubuntu 圖形界面登錄 root 用戶出現錯誤無法進入時 1. 檢查 PAM 配置文件 PAM&#xff08;Pluggable Authentication Modules&#xff0c;可插拔認證模塊&#xff09;負責管理用戶認證相關的策略。圖形登錄界面的 PAM 配置文件通常是 /etc/pam.d/gdm-password 。以管理員權…

【雜談】-逆縮放悖論:為何更多思考會讓AI變“笨“?

逆縮放悖論&#xff1a;為何更多思考會讓AI變"笨"&#xff1f; 文章目錄逆縮放悖論&#xff1a;為何更多思考會讓AI變"笨"&#xff1f;1、解碼逆縮放現象2、AI 推理失效的五大癥結3、AI 推理應對復雜度的策略圖譜4、人工智能評估體系的反思5、人工智能推理…

強制用戶更改WordPress密碼的重要性及實現方法

確保 WordPress 網站的安全性是每位網站管理者的重要任務。在網絡安全日益受到關注的今天&#xff0c;為用戶提供安全、穩定的網絡環境至關重要。而一個有效的方法就是強制用戶定期更改密碼。這篇文章將介紹為什么要強制用戶更改密碼以及如何在 WordPress 中實現這一功能。同時…

計算機基礎速通--數據結構·串的應用

如有問題大概率是我的理解比較片面&#xff0c;歡迎評論區或者私信指正。 友友們&#xff0c;我遇到了一個大問題&#xff0c;技術類的英文面&#xff08;ai應用開發/java后端偏金融方向&#xff09;該如何準備&#xff1f;本人英語就過了個六級&#xff0c;腦闊疼額。友友們有…

05--STL認識(了解)

1. STL概念——標準模板庫 STL(standard template libaray-標準模板庫)&#xff1a;是C標準庫的重要組成部分&#xff0c;不僅是一個可復用的組件庫&#xff0c;而且是一個包羅數據結構與算法的軟件框架。 STL與CPP標準庫的關系&#xff1a; 2. STL的版本 3. STL的組成 4. STL…