您好,登錄后才能下訂單哦!
這篇“MySQL中正則表達式如何使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MySQL中正則表達式如何使用”文章吧。
有時候使用MySQL進行數據庫查詢數據的時候,like查詢存在局限性,這時候就可以使用MySQL中的正則表達式查詢的方式。
正則表達式是用來匹配文本的特殊的串(字符集合),將一個模式(正則表達式)與一個文本串進行比較。
從文本文件中提取電話號碼
查找名字中間帶有數字的文件
文本塊中重復出現的單詞
替換頁面的URL為這些URL的實際鏈接(一個或兩個正則表達式)
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查詢結果。
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中有專門的字符串截取函數:其中常用的有兩種: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中正則表達式如何使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。