《MySQL中使用正則表達式》要點:
本文介紹了MySQL中使用正則表達式,希望對您有用。如果有疑問,可以聯系我們。
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個或多個匹配(等于{1,})
? 0個或1個匹配(等于{0,1})
{n} 指定數目的匹配
{n,} 不少于指定數目的匹配
{n,m} 匹配數目的范圍( 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:]]{4}’
ORDER BY prod_name;
[:digit:]匹配任意數字,因而它為數字的一個集合. {4}確切地要求它前面的字符(任意數字)呈現4次,所以[[:digit:]]{4}匹配連在一起的任意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中正則表達式的基本使用.繼續學習中.敬請期待.
想快速聯系我,敬請存眷微信公眾號:AiryData
歡迎參與《MySQL中使用正則表達式》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7151.html