MySQL中正則表達式(REGEXP)使用詳解

 更新時間:2022年07月06日 09:59:16   作者:夜空の雪風  
正則表達式常用來檢索和替換那些符合魔種模式的文本,下面這篇文章主要給大家介紹了關于MySQL中正則表達式(REGEXP)使用的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

前言

有時候使用MySQL進行數據庫查詢數據的時候,like查詢存在局限性,這時候就可以使用MySQL中的正則表達式查詢的方式。

正則表達式是用來匹配文本的特殊的串(字符集合),將一個模式(正則表達式)與一個文本串進行比較。

  • 從文本文件中提取電話號碼
  • 查找名字中間帶有數字的文件
  • 文本塊中重復出現的單詞
  • 替換頁面的URL為這些URL的實際鏈接(一個或兩個正則表達式)

LIKE和REGEXP的區別

LIKE匹配整個列(like是模糊查詢),如果被匹配的文本僅在列值中出現,LIKE并不會找到它,相應的行也不會返回(當然,使用通配符除外)
REGEXP在列值內進行匹配,如果被匹配的匹配的文本在列值中出現,REGEXP將會找到它,相應的行將被返回,這時一個非常重要的差別(當然,如果適應定位符號^和$,可以實現REGEXP匹配整個列而不是列的子集)

例如:

查詢一個表name列含有chen字符串的數據,兩條sql語句如下

select * from stu_info where name like '小白';
select * from stu_info where name regexp '小白';

第一條的查詢結果是name值等于’小白‘的數據,而第二條的查詢結果是name中包含’小白’的數據,也可以用like(模糊查詢+通配符)來實現regexp查詢結果。

OR進行匹配

select column from table where column regexp 'X|Y' order by column;
select column from table where column regexp '[XY]test' order by column;

第一種寫法會將|應用于整個串,只要字符串中有X或Y的數據,都將被檢索出來

第二種寫法只將[XY]應用于搜索模式的開頭處

匹配范圍

([])集合可以用來定義要匹配的一個或多個字符,比如[0123456789],為了簡化這種類型的集合,可使用(-)來定義一個范圍,即[0-9],[a-z]

匹配特殊字符

則表達式由具有特定含義的特殊字符構成;如果要匹配這些特殊字符,就需要用\為前導,這種處理方式就是所謂的轉義(escaping),正則表達式內具有特殊意義的所有字符都必須以這種方式轉義;(為了匹配反斜杠{}字符本身,需要使用\\)

注意:多數正則表達式實現使用單個反斜杠轉義特殊字符,以便能夠使用這些字符本身,而MySQL要求兩個反斜杠(MySQL自己解釋一個,正則表達式庫解釋一個)

匹配字符類

有時候需要檢索出我們需要的數字、所有字母字符或所有數字字母字符等的匹配,我們可以使用預定義的字符集,稱為字符類。

匹配多個實例

有時候需要對匹配的數目進行更強的控制,比如:尋找所有的數,不管數中包含多少數字,或尋找一個單詞并尾隨一個s(如果存在)等情況,我們可以利用正則表達式中的重復元字符來完成。

select column from table where column regexp '\\([0-9] sticks?\\)' order by column;

上面的正則表達式‘\([0-9] sticks?\)’意為:\匹配([0-9]匹配任意數字,這里指匹配的數值范圍,sticks?匹配stick和sticks{?使s可選,因為?匹配它前面任何字符的0或者1次出現})。

定位符

有時候為了匹配特定位置的文本,需要使用定位符,常用定位符列表如下:

找出一個以一個數(包括小數點開始的數)開始的所有數值,簡單搜索[0-9\.]或([[:digit:]\.])不行,因為它將在文本內任意位置查找匹配,可以使用^定位符,如下:

select column from table where column regexp '^[0-9\\.]' order by column;

^有兩種用法

  • 在集合中(用[和]定義),用它來否定該集合
  • 用來指串的開始處

使regexp和like起相同作用:like匹配整串二regexp匹配子串,可以利用定位符,用^開始每個表達式,用$結束每個表達式,就可以使regexp和like作用一樣。

查詢admin表中的group字段,數據格式為:1,2,3;4,5,6;1,87,101

例如查詢101:

select * from xin_admin where `group` REGEXP '[,|;]?101[,|;]?';

附:Mysql字符串截取 和 截取字符進行查詢

一、MySQL中字符串的截取

MySQL中有專門的字符串截取函數:其中常用的有兩種:substring_index(str,delim,count) 和concat

1.substring_index(str,delim,count) 函數的使用較為普遍。

函數括號里面的依次為:要分隔截取的字符串(如:”aaa_bbb_ccc”)、分隔符(如:“_”)、位置(表示第幾個分隔符處,如:“1”)。

  • count為正數,那么就是從左邊開始數,函數返回第count個分隔符的左側的字符串;
  • count為負數,那么就是從右邊開始數,函數返回第count個分隔符右邊的所有內容;
  • count可以為0,返回為空。

例子:substring_index("aaa_bbb_ccc","_",1) ,返回為 aaa;
         substring_index("aaa_bbb_ccc","_",2) ,返回為 aaa_bbb;
         substring_index(substring_index("aaa_bbb_ccc","_",-2),"_",1) ,返回為 bbb;

2.concat是連接幾個字符串

例子:concat(‘m’,’y’,’s’,’q’,’l’);

返回:mysql

二、依據表中的某個字段查詢包含有這個字符的所有數據

1.find_in_set:SELECT * FROM user WHERE find_in_set(‘吳’,name);

查詢user表中所有name包含“吳”的數據

2.REGEXP:SELECT * FROM user WHERE name REGEXP ‘(‘吳’|‘劉’)’;

使用正則,查詢包含劉或者吳的數據

總結

到此這篇關于MySQL中正則表達式(REGEXP)使用的文章就介紹到這了,更多相關MySQL正則表達式內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL slow_log表無法修改成innodb引擎詳解

    MySQL slow_log表無法修改成innodb引擎詳解

    這篇文章主要給大家介紹了關于MySQL slow_log表無法修改成innodb引擎的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • Mysql systemctl start mysqld報錯的問題解決

    Mysql systemctl start mysqld報錯的問題解決

    最近運行Mysql發現報錯,本文就來介紹一下Mysql systemctl start mysqld報錯的問題解決,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • MySQL派生表聯表查詢實戰過程

    MySQL派生表聯表查詢實戰過程

    派生表是查詢結果組成的虛擬表,派生表是在外部查詢的FROM子句中定義的,不需要手動創建,下面這篇文章主要給大家介紹了關于MySQL派生表聯表查詢的相關資料,需要的朋友可以參考下
    2022-03-03
  • MySQL5.6安裝步驟圖文詳解

    MySQL5.6安裝步驟圖文詳解

    這篇文章主要為大家詳細介紹了MySQL安裝步驟配置方法圖文,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Mysql數據庫監聽binlog的開啟步驟

    Mysql數據庫監聽binlog的開啟步驟

    這篇文章主要給大家介紹了關于Mysql數據庫監聽binlog的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Mysql具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • MySQL關閉密碼強度驗證功能

    MySQL關閉密碼強度驗證功能

    本文通過實例代碼給大家介紹了mysql關閉密碼強度驗證功能,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-06-06
  • 從創建數據庫到存儲過程與用戶自定義函數的小感

    從創建數據庫到存儲過程與用戶自定義函數的小感

    從創建數據庫到存儲過程與用戶自定義函數的小感,深入的學習mysql
    2011-09-09
  • mybatis 模糊查詢的實現方法

    mybatis 模糊查詢的實現方法

    這篇文章主要介紹了mybatis 模糊查詢的實現方法的相關資料,希望通過本文能幫助到大家,讓大家掌握這部分內容,需要的朋友可以參考下
    2017-10-10
  • MySQL常用存儲引擎功能與用法詳解

    MySQL常用存儲引擎功能與用法詳解

    這篇文章主要介紹了MySQL常用存儲引擎功能與用法,較為詳細的分析了mysql存儲引擎的分類、功能、使用方法及相關操作注意事項,需要的朋友可以參考下
    2018-04-04
  • MySQL使用變量實現各種排序

    MySQL使用變量實現各種排序

    這篇文章主要介紹了MySQL使用變量實現各種排序,需要的朋友可以參考下
    2017-05-05

最新評論

美丽人妻被按摩中出中文字幕