mysql基礎 3 使用正規表示式搜尋

2021-09-25 09:19:06 字數 3097 閱讀 6580

檢索列prod_name中國包含文字1000的所有行(假設有兩個值為』jack 1000』和』jack 2000』的資料)

select prod_name from prod_name regexp '1000';

regexp之後的內容作為正規表示式處理

假如我們使用like,

select prod_name from prod_name like '1000';
這樣是匹配不到值的,我們必須在1000的前後加上%,像這樣:

select prod_name from prod_name like '%1000%';
注意:like 和 regexp的區別

select prod_name from prod_name regexp '1000|2000';
假如我們有 『1tom』,『2tom』,『tom1』,『tom2』,『tom3』幾個名字,我們想要匹配』1tom』,『2tom』

select prod_name from products where prod_name regexp '[12]tom';
使用了正規表示式 [12]tom,[12] 定義一組字元,它的意思是匹配 1 或 2 ,因此, 1tom 和 2tom 都匹配且返回

是另一種形式的 or 語句。事實上,正規表示式 [12]tom為 [1|2]tom 的縮寫,也可以使用後者,但是,需要用 來定義 or 語句查詢什麼。為更好地理解這一點,請看下面的例子:

select prod_name from products where prod_name regexp '1|2tom';
找到的結果為』1tom』,『2tom』,『tom1』

分析:這並不是期望的輸出。兩個要求的行被檢索出來,但還檢索出了另外1行。之所以這樣是由於mysql假定你的意思是 『1』 或 『2tom』 。除非把字元 | 括在乙個集合中,否則它將應用於整個串。

小知識:字元集合也可以被否定,即,它們將匹配除指定字元外的任何東西。為否定乙個字符集,在集合的開始處放置乙個 ^ 即可。因此,儘管 [123]匹配字元 1 、 2 或 3 ,但 [^123] 卻匹配除這些字元外的任何東西。

集合可用來定義要匹配的乙個或多個字元。例如,下面的集合將匹配數字0到9:[0123456789],可以簡化為[0-9]

select prod_name from products where prod_name regexp '[1-5]tom';
結果『1tom』,『2tom』

正規表示式語言由具有特定含義的特殊字元構成。我們已經看到 . 、 、| 和 - 等,還有其他一些字元。學過正則的我們都知道使用 \ 來進行轉義,但是在sql中

要求使用\來進行轉義(mysql自己解釋乙個,正規表示式庫解釋另乙個)

字元說明

\f換頁

\n換行

\r回車

\t製表

\v縱向製表

\\\乙個反斜槓

\.乙個.類說明

[:alnum:]

任意字母和數字(同[a-za-z0-9])

[:alpha:]

任意字元(同[a-za-z])

[:blank:]

空格和製表(同[\t])

[:cntrl:]

ascii控制字元(ascii 0到31和127)

[:digit:]

任意數字(同[0-9])

[:graph:]

與[:print:]相同,但不包括空格

[:lower:]

任意小寫字母(同[a-z])

[:print:]

任意可列印字元

[:punct:]

既不在[:alnum:]又不在[:cntrl:]中的任意字元

[:space:]

包括空格在內的任意空白字元(同[\f\n\r\t\v])

[:upper:]

任意大寫字母(同[a-z])

[:xdigit:]

任意十六進製制數字(同[a-fa-f0-9])

在正則匹配中我們可以使用\d來匹配4個連續的數字,但是在sql中我們就需要使用sql的[[:digit:]],或者[0-9][0-9][0-9][0-9]

我們可以這麼寫sql語句

select prod_name from products where prod_name regexp '[[:digit:]]';
或者

select prod_name from products where prod_name regexp '[0-9][0-9][0-9][0-9]';
元字元說明*

0個或多個匹配

+1個或多個匹配(等於)

?0個或1個匹配(等於)

指定數目的匹配

不少於指定數目的匹配

匹配數目的範圍(m不超過255)

例:

select prod_name from products where prod_name regexp '\\([0-9] stricks?\\)';
分析

\\(匹配(, [0-9] 匹配任意數字,sticks?匹配sticksticks( s 後的 ? 使 s 可選,因為 ? 匹配它前面的任何字元的0次或1次出現), \) 匹配 ) 。沒有 ? ,匹配 stick 和 sticks 會非常困難

元字元說明

^文字的開始

$文字的結尾

[[:<:]]

詞的開始

[[:>:]]

詞的結尾

注意^ 有兩種用法。在集合中(用 [ 和 ] 定義),用它來否定該集合,否則,用來指串的開始處。

mysql正規表示式 MySQL正規表示式

正規表示式是為複雜搜尋指定模式的強大方式。正規表示式描述了一組字串。最簡單的正規表示式是不含任何特殊字元的正規表示式。例如,正規表示式hello匹配hello。非平凡的正規表示式採用了特殊的特定結構,從而使得它們能夠與1個以上的字串匹配。例如,正規表示式hello word匹配字串hello或字串w...

正規表示式簡介(微軟) 3 使用正規表示式

使用正規表示式 在典型的搜尋和替換操作中,必須提供要查詢的確切文字。這種技術對於靜態文字中的簡單搜尋和替換任務可能足夠了,但是由於它缺乏靈活性,因此在搜尋動態文字時就有困難了,甚至是不可能的。使用正規表示式,就可以 1.測試字串的某個模式。例如,可以對乙個輸入字串進行測試,看在該字串是否存在乙個 號...

正規表示式基礎使用

符號 解釋說明 匹配任意乙個字元,除了 n 匹配 中列舉的字元 d匹配數字,即0 9 d匹配非數字,即不是數字 s匹配空白,即空格 tab鍵 s匹配非空白 w匹配單調字元,即a z a z 0 9 中文等 w匹配非單調 符號解釋說明 匹配前乙個字元出現0次或者無限次,即可有可無 匹配前乙個字元出現1...