正則表達(dá)式作用:這也就是正則表達(dá)式變得有用的地方。正則表達(dá)式是用來(lái)匹配文本的特殊的串(字符集合)焕檬。
正則表達(dá)式是一個(gè)大合集盛险,mysql支持的是一個(gè)子集。正則表達(dá)式詳細(xì)的需要看另外的書(shū)箱季。
正則表達(dá)式舉例:下面語(yǔ)句檢索列name包含文本1000的所有行:
select name from product?
where name REGEXP '1000'
order by name
REGEXP后所跟的東西作為正則表達(dá)式(與文字正文1000匹配的一個(gè)正則表達(dá)式)處理。
1棍掐、eg:select name from product?
where name REGEXP '.000'
order by name藏雏;
這里使用了正則表達(dá)式.000。.是正則表達(dá)式語(yǔ)言中一個(gè)特殊的字符作煌。它表示匹配任意一個(gè)字符.
注意:LIKE匹配整個(gè)列掘殴。如果被匹配的文本在列值中出現(xiàn)赚瘦,LIKE將不會(huì)找到它,相應(yīng)的行也不被返回(除非使用通配符)奏寨。而REGEXP在列值內(nèi)進(jìn)行匹配起意,如果被匹配的文本在列值中出現(xiàn),REGEXP將會(huì)找到它服爷,相應(yīng)的行將被返回杜恰。這是一個(gè)非常重要的差別获诈。
那么仍源,REGEXP能不能用來(lái)匹配整個(gè)列值(從而起與LIKE相同的作用)?答案是肯定的舔涎,使用^和$定位符(anchor)即可笼踩,本章后面介紹。
注意:匹配不區(qū)分大小寫(xiě)MySQL中的正則表達(dá)式匹配(自版本3.23.4后)不區(qū)分大小寫(xiě)(即亡嫌,大寫(xiě)和小寫(xiě)都匹配)嚎于。為區(qū)分大小寫(xiě),可使用BINARY關(guān)鍵字挟冠,如WHERE prod_name REGEXPBINARY 'JetPack .000'于购。
2、為搜索兩個(gè)串之一(或者為這個(gè)串知染,或者為另一個(gè)串)肋僧,使用|,
eg:select name from product?
where name REGEXP '1000|2000'
order by name控淡;
3嫌吠、匹配幾個(gè)字符之一--可通過(guò)指定一組用[和]括起來(lái)的字符來(lái)完成
eg:select name from product?
where name REGEXP '[123]TON'? ---意思是匹配1ton或者2ton或者3ton
order by name;
注意:事實(shí)上掺炭,正則表達(dá)式[123]Ton為[1|2|3]Ton的縮寫(xiě)辫诅,也可以使用后者。但是涧狮,需要用[]來(lái)定義OR語(yǔ)句查找什么炕矮。(告訴程序運(yùn)算順序)
4、匹配范圍:
集合可用來(lái)定義要匹配的一個(gè)或多個(gè)字符者冤。例如吧享,下面的集合將匹配數(shù)字0到9
[0123456789]
為簡(jiǎn)化這種類型的集合,可使用-來(lái)定義一個(gè)范圍譬嚣。下面的式子功能上等同于上述數(shù)字列表:[0-9]
范圍不限于完整的集合钢颂,[1-3]和[6-9]也是合法的范圍。此外拜银,范圍不一定只是數(shù)值的殊鞭,[a-z]匹配任意字母字符遭垛。
5、匹配特殊字符:
正則表達(dá)式語(yǔ)言由具有特定含義的特殊字符構(gòu)成操灿。我們已經(jīng)看到.锯仪、[]、|和-等趾盐,還有其他一些字符庶喜。請(qǐng)問(wèn),如果你需要匹配這些字符救鲤,應(yīng)該怎么辦呢久窟?例如,如果要找出包含.字符的值本缠,怎樣搜索斥扛?
為了匹配特殊字符,必須用\\為前導(dǎo)丹锹。\\-表示查找-稀颁,\\.表示查找.。
eg:select name from product?
where name REGEXP '\\.'
order by name楣黍;
6匾灶、匹配字存在找出你自己經(jīng)常使用的數(shù)字、所有字母字符或所有數(shù)字字母字符等的匹配租漂。為更方便工作阶女,可以使用預(yù)定義的字符集,稱為字符(character class)
7窜锯、匹配多個(gè)實(shí)例
目前為止使用的所有正則表達(dá)式都試圖匹配單次出現(xiàn)张肾。如果存在一個(gè)匹配,該行被檢索出來(lái)锚扎,如果不存在吞瞪,檢索不出任何行。但有時(shí)需要對(duì)匹配的數(shù)目進(jìn)行更強(qiáng)的控制驾孔。例如芍秆,你可能需要尋找所有的數(shù),不管數(shù)中包含多少數(shù)字翠勉,或者你可能想尋找一個(gè)單詞并且還能夠適應(yīng)一個(gè)尾隨的s(如果存在)妖啥,等等。
這可以用表9-3列出的正則表達(dá)式重復(fù)元字符來(lái)完成对碌。
8荆虱、定位符
目前為止的所有例子都是匹配一個(gè)串中任意位置的文本。為了匹配特定位置的文本,需要使用表9-4列出的定位符怀读。
注意:
1诉位、^的雙重用途^有兩種用法。在集合中(用[和]定義)菜枷,用它來(lái)否定該集合苍糠,否則,用來(lái)指串的開(kāi)始處啤誊。
2岳瞭、使REGEXP起類似LIKE的作用本章前面說(shuō)過(guò),LIKE和REGEXP的不同在于蚊锹,LIKE匹配整個(gè)串而REGEXP匹配子串瞳筏。利用定位符,通過(guò)用^開(kāi)始每個(gè)表達(dá)式枫耳,用$結(jié)束每個(gè)表達(dá)式乏矾,可以使REGEXP的作用與LIKE一樣