MySQL(三)用正則表達式搜索


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

所有種類的程序設計語言、文本編輯器、操作系統等都支持正則表達式,正則表達式用正則表達式語言來建立;

MySQL僅支持多數正則表達式實現的一個很小的子集;

 

一、基本字符匹配

select column from table where column regexp ‘1000’ order by column;

該語句檢索列column包含文本1000的所有行;它告訴MySQL:regexp后所跟的東西作為正則表達式(與文字正文1000匹配的一個正則表達式)處理。

select column from table where column regexp ‘.000’ order by column;

該語句中的正則表達式(.是正則表達式語言中的一個特殊字符,表示匹配任意一個字符(該語句也可以使用like和通配符完成)

like和regexp的區別:

①like匹配整個列;

select column from table where column like ‘1000’ order by column;

該SQL語句將不返回數據,因為like匹配整個列,如果被匹配的文本在列值中出現,like將不會找到它,相應的行也不會被返回(除非使用通配符)

②regexp在列值內進行匹配

select column from table where column regexp ‘1000’ order by column;

該SQL語句會返回一行數據,如果被匹配的文本在列值中出現,regexp將會找到它,相應的行將被返回(如果希望regexp匹配整個列值,使用^和$定位符{anchor})即可

MySQL中正則表達式匹配不區分大小寫,如希望區分大小寫,可使用binary關鍵字,如where column regexp binary ‘test .000’

 

二、進行or匹配

select column from table where column regexp ‘X|Y’ order by column;

or表示匹配其中之一,功能雷雨與select語句中的or語句,多個or條件可並入單個正則表達式

 

三、匹配幾個字符之一

select column from table where column regexp ‘[XYZ]test’ order by column;

[]是另一種形式的or語句,作用是匹配指定的(其中之一)字符;正則表達式[XY]test為[X|Y|Z]test的縮寫,它的意思是匹配X或者Y或者Z

字符集合也可以被否定,即匹配除指定字符外的任何東西,為否定一個字符集,可以在集合開始處設置一個‘^’例如[^XYZ]([]定義更准確,|如果不括起來,則應用於整個串

 

四、匹配范圍

集合可以用來定義要匹配的一個或多個字符

比如[0123456789],為了簡化這種類型的集合,可使用(-)來定義一個范圍,即[0-9];(范圍不僅僅局限於數值,還可以使字母字符等)

 

五、匹配特殊字符

正則表達式由具有特定含義的特殊字符構成;如果要匹配這些特殊字符,就需要用\\為前導;\\-表示查找-,\\.表示查找.

select column from table where column regexp ‘\\-’ order by column;

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

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

\\也用來引用元字符(具有特殊含義的字符),如下:

 

六、匹配字符類

字符類(character class):有時候需要檢索出我們需要的數字、所有字母字符或所有數字字母字符等的匹配,我們可以使用預定義的字符集,稱為字符類;如下:

 

七、匹配多個實例

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

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

上面的正則表達式‘\\([0-9] test?\\)’意為:\\匹配([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作用一樣

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM