萬用字元和正規表示式

2021-08-28 07:58:20 字數 3458 閱讀 5453

1.like操作符

2.百分號萬用字元(%)

在搜尋串中,%表示任何字元出現的任意次數。%不能匹配null,如like 『jet%』表示以jet開頭的後面不管多少字元的匹配。

如果區分大小寫查詢,使用binary:

select * from `test` where binary `name` = "test"
3.下劃線萬用字元(_)

下劃線只匹配單個字元而不是多個字元,like 『_ton』

使用萬用字元會使查詢變慢。

1.基本字元匹配

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匹配整個列值,使用^和$定位符)即可

mysql中正規表示式匹配不區分大小寫,如希望區分大小寫,可使用binary關鍵字,如where column regexp binary 『test .000』

2.進行or匹配

select column from table where column regexp 'x|y' order by column;
or表示匹配其中之一,功能雷雨與select語句中的or語句,多個or條件可併入單個正規表示式

3.匹配幾個字元之一

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];(範圍不僅僅侷限於數值,還可以使字母字元等)

4、匹配特殊字元

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

select column from table where column regexp 『\-』 order by column;

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

ps:多數正規表示式實現使用單個反斜槓轉義特殊字元,以便能夠使用這些字元本身,而mysql要求兩個反斜槓(mysql自己解釋乙個,正規表示式庫解釋乙個)

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

5、匹配字元類

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

6、匹配多個例項

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

select column from table where column regexp 『\([0-9] sticks?\)』 order by column;
上面的正規表示式『\([0-9] test?\)』意為:\匹配([0-9]匹配任意數字,這裡指匹配的數值範圍,sticks?匹配stick和sticks)

7、定位符

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

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

select column from table where column regexp 『1

』 order by column;

^匹配串的開始,有兩種用法:

在集合中(用[和]定義),用它來否定該集合

用來指串的開始處

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

0-9\. ↩︎

正規表示式 和 萬用字元

正規表示式 正規表示式主要是用來描述乙個句法規則的模式。其實說的通俗一點,就是利用字元和元字元的組合,對一些符合既定句法的模式進行模糊匹配。它的主要功能是文字查詢和字串操作。正規表示式的基本元素包括普通字元和元字元,在linux shell裡面,常用的正規表示式元字符集為 s 每乙個元字元都有自己在...

萬用字元和正規表示式

萬用字元叫做檔名萬用字元更能突出其作用範圍,因為 萬用字元主要用於檔名的通配 可以在 shell 命令中使用,常用的萬用字元有以下幾個 星號用來匹配 任意長度 的任意字元。問號用來匹配 任意單個字元。匹配指定範圍 之外的任意單個字元。如 a z lower 匹配小寫字母 a z之外的任意單個字元 匹...

萬用字元 正規表示式

萬用字元 萬用字元是系統級別的 而正規表示式需要相關 工具和語 言的 支援 egrep,awk,vi,perl。當您鍵入 ls txt 命令並按 enter 後,尋找哪些檔案同 txt 模式相匹配的任務不是由 ls 命令,而是由 shell 自己完成。這需要對命令列是如何被 shell 解析的作進一...