檢索列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?
匹配stick
和sticks
( 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...