預備閱讀:
mysql中用正規表示式進行搜尋1、使用mysql正規表示式(1)基本字串匹配
select prod_name
from products
where prod_name regexp 『1000』
order by prod_name;
檢索prod_name包含文字1000的所有行。
除關鍵字like被regexp替代外,這條語句看上去非常像使用
like的語句(第8章)。它告訴mysql: regexp後所跟的東西作
為正規表示式(與文字正文1000匹配的乙個正規表示式)處理。
select prod_name
from products
where prod_name regexp 『.000』
order by prod_name;
正則中,.代表匹配任意乙個字元。
區分大小寫時:使用binary關鍵字
where prod_name regexp binary 『jetpack .000』;
(2)進行or匹配(使用『|』)
select prod_name
from products
where prod_name regexp 『1000|2000』
order by prod_name;
可使用多個。
(3)匹配幾個字元之一
用[和]括起來的字元完成
select prod_name
from products
where prod_name regexp 『[123] ton』
order by prod_name;
是另一種形式的or語句。 事實上,正規表示式[123]ton
為[1|2|3]ton的縮寫,也可以使用後者。但是,需要用來定義or語句查詢什麼。
select prod_name
from products
where prod_name regexp 『1|2|3 ton』
order by prod_name;
(4)匹配範圍
下面的集合將匹配數字0到9:[0-9],a到z:[a-z]
select prod_name
from products
where prod_name regexp 『[1-5] ton』
order by prod_name;
(5) 匹配特殊字元
必須用\\為前導,\\-表示查詢-,.
select vend_name
from vendors
where vend_name regexp 『\\.』
order by vend_name;
這種處理就是所謂的轉義( escaping),正規表示式內具有特殊意義的所有字元都必須以這種方式轉義。
匹配\ 為了匹配反斜槓( \)字元本身,需要使用\\\。
元 字 符 說 明
\\f 換頁
\\n 換行
\\r 回車
\\t 製表
\\v 縱向製表
(6)匹配字元類
存在找出你自己經常使用的數字、所有字母字元或所有數字字母字
符等的匹配。為更方便工作,可以使用預定義的字符集,稱為字元類
( character class)。
字元類 說 明
[: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])
(7)匹配多個例項
重複元字元
元字元 說 明
* 0個或多個匹配
+ 1個或多個匹配(等於)
? 0個或1個匹配(等於)
指定數目的匹配
不少於指定數目的匹配
匹配數目的範圍( m不超過255)
select prod_name
from products
where prod_name regexp 『\\([0-9] sticks?\\)』
order by prod_name;
正規表示式\\([0-9] sticks?\\)需要解說一下。 \\(匹配),[0-9]匹配任意數字(這個例子中為1和5), sticks?匹配stick和sticks( s後的?使s可選,因為?匹配它前面的任何字元的0次或1次出現), \\)匹配)。沒有?,匹配stick和sticks會非常困難。
匹配連在一起的4位數字:
select prod_name
from products
where prod_name regexp 『[[:digit:]]』
order by prod_name;
[:digit:]匹配任意數字,因而它為數字的乙個集合。 確切地要求它前面的字元(任意數字)出現4次,所以[[:digit:]]匹配連在一起的任意4位數字。或者如下
select prod_name
from products
where prod_name regexp 『[0-9] [0-9] [0-9] [0-9]』
order by prod_name;
(8)定位符
匹配特定位置的文字,需要使用定位元字元。
元字元說明
^ 文字的開始
$ 文字的結尾
[[:<:]] 詞的開始
[[:>:]] 詞的結尾
select prod_name
from products
where prod_name regexp 『^[0-9\\.]』
order by prod_name;
^匹配串的開始。因此, ^[0-9\\.]只在.或任意數字為串中第
乙個字元時才匹配它們。
^的雙重用途^有兩種用法。在集合中(用[和]定義),用它
來否定該集合,否則,用來指串的開始處。
**:
mysql正規表示式 MySQL正規表示式
正規表示式是為複雜搜尋指定模式的強大方式。正規表示式描述了一組字串。最簡單的正規表示式是不含任何特殊字元的正規表示式。例如,正規表示式hello匹配hello。非平凡的正規表示式採用了特殊的特定結構,從而使得它們能夠與1個以上的字串匹配。例如,正規表示式hello word匹配字串hello或字串w...
mysql 正規表示式
已知mysql可以通過 like 來進行模糊匹配。mysql 同樣也支援其他正規表示式的匹配,mysql中使用 regexp 操作符來進行正規表示式匹配。例項 查詢name欄位中以 st 為開頭的所有資料 mysql select name from person tbl where name re...
MySQL正規表示式
在前面我們已經看到了mysql的模式匹配 like mysql支援另一種型別的模式匹配的操作基於正規表示式和正規表示式運算子。如果知道php或perl,那麼它是非常簡單的,因為這匹配非常相似於指令碼正規表示式。以下是模式的 其可以連同regexp運算子使用。模式什麼樣的模式匹配 開始的乙個字串 結束...