欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

有時(shí)候使用MySQL進(jìn)行數(shù)據(jù)庫(kù)查詢數(shù)據(jù)的時(shí)候,like查詢存在局限性,這時(shí)候就可以使用MySQL中的正則表達(dá)式查詢的方式。

正則表達(dá)式是用來(lái)匹配文本的特殊的串(字符集合),將一個(gè)模式(正則表達(dá)式)與一個(gè)文本串進(jìn)行比較。

  • 從文本文件中提取電話號(hào)碼
  • 查找名字中間帶有數(shù)字的文件
  • 文本塊中重復(fù)出現(xiàn)的單詞
  • 替換頁(yè)面的URL為這些URL的實(shí)際鏈接(一個(gè)或兩個(gè)正則表達(dá)式)

LIKE和REGEXP的區(qū)別

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

例如:

查詢一個(gè)表name列含有chen字符串的數(shù)據(jù),兩條sql語(yǔ)句如下

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

第一條的查詢結(jié)果是name值等于’小白‘的數(shù)據(jù),而第二條的查詢結(jié)果是name中包含’小白’的數(shù)據(jù),也可以用like(模糊查詢+通配符)來(lái)實(shí)現(xiàn)regexp查詢結(jié)果。

OR進(jìn)行匹配

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

第一種寫法會(huì)將|應(yīng)用于整個(gè)串,只要字符串中有X或Y的數(shù)據(jù),都將被檢索出來(lái)

第二種寫法只將[XY]應(yīng)用于搜索模式的開(kāi)頭處

匹配范圍

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

匹配特殊字符

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

注意:多數(shù)正則表達(dá)式實(shí)現(xiàn)使用單個(gè)反斜杠轉(zhuǎn)義特殊字符,以便能夠使用這些字符本身,而MySQL要求兩個(gè)反斜杠(MySQL自己解釋一個(gè),正則表達(dá)式庫(kù)解釋一個(gè))

匹配字符類

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

匹配多個(gè)實(shí)例

有時(shí)候需要對(duì)匹配的數(shù)目進(jìn)行更強(qiáng)的控制,比如:尋找所有的數(shù),不管數(shù)中包含多少數(shù)字,或?qū)ふ乙粋€(gè)單詞并尾隨一個(gè)s(如果存在)等情況,我們可以利用正則表達(dá)式中的重復(fù)元字符來(lái)完成。

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

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

定位符

有時(shí)候?yàn)榱似ヅ涮囟ㄎ恢玫奈谋?,需要使用定位符,常用定位符列表如下?/p>

找出一個(gè)以一個(gè)數(shù)(包括小數(shù)點(diǎn)開(kāi)始的數(shù))開(kāi)始的所有數(shù)值,簡(jiǎn)單搜索[0-9\.]或([[:digit:]\.])不行,因?yàn)樗鼘⒃谖谋緝?nèi)任意位置查找匹配,可以使用^定位符,如下:

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

^有兩種用法

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

使regexp和like起相同作用:like匹配整串二regexp匹配子串,可以利用定位符,用^開(kāi)始每個(gè)表達(dá)式,用$結(jié)束每個(gè)表達(dá)式,就可以使regexp和like作用一樣。

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

例如查詢101:

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

附:Mysql字符串截取 和 截取字符進(jìn)行查詢

一、MySQL中字符串的截取

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

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

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

  • count為正數(shù),那么就是從左邊開(kāi)始數(shù),函數(shù)返回第count個(gè)分隔符的左側(cè)的字符串;
  • count為負(fù)數(shù),那么就是從右邊開(kāi)始數(shù),函數(shù)返回第count個(gè)分隔符右邊的所有內(nèi)容;
  • 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是連接幾個(gè)字符串

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

返回:mysql

二、依據(jù)表中的某個(gè)字段查詢包含有這個(gè)字符的所有數(shù)據(jù)

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

查詢user表中所有name包含“吳”的數(shù)據(jù)

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

使用正則,查詢包含劉或者吳的數(shù)據(jù)

總結(jié)

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

相關(guān)文章

最新評(píng)論