用正規表達式進行搜尋
正規表達式的介紹
正規表達式的使用環境
- 如果你想從一個文本檔案中提取電話号碼
- 如果你需要查找名字中間有數字的所有檔案
- 如果你想在一個文本塊中找到所有重複的單詞
- 如果你想替換一個頁面中的所有URL為這些URL的實際HTML連結
基本字元比對
文法結構
SELECT 列名
FROM 表格
WHERE 列名 REGEXP 'XX'
ORDER BY 列名
表示傳回列中列名中包含(XX)子列的所有行
除了關鍵字LIKE被REGEXP代替外,這個文法結構和LIKE的語句相同
LIKE與REGEXP的差別
如果LIKE語句想和REGEXP語句有相同的作用,需要結合(_或%)來使用
進行OR比對
文法結構
SELECT 列名
FROM 表格
WHERE 列名 REGEXP 條件一 | 條件二
ORDER BY 列名;
這個語句用于檢索清單中滿足條件一或條件二的所有行
比對幾個字元之一
比對任何單一字元。但是如果比對特定的字元,怎麼辦,可以通過指定一組用[和]括起來的字元來完成。
文法結構
SELECT 列名
FROM 表格
WHERE 列名 REGEXP '[abc] XX'
ORDER BY 列名;
該語句意義為:删選除列值滿足a XX 或 b XX 或 c XX的所有的列
正規表達式[abc]xx是[a|b|c]xx的縮寫
比對範圍
要是比對範圍,将比對字元的[abc]換成[a-c]即可
比對特殊字元
要比對列值中包含特殊字元,必須使用\ \為作為前導
空白元字元
元字元 | 說明 |
---|---|
\ \f | 換頁 |
\ \n | 換行 |
\ \r | 回車 |
\ \t | 制表 |
\ \v | 縱向制表 |
比對字元類
字元類
類 | 說明 |
---|---|
[ :alnum: ] | 任意字母和數字(同[a-ZA-z0-9]) |
[ :alpha: ] | 任意字元(同[a-zA-Z]) |
[ :black: ] | 空格和制表(同[ \ \t]) |
[ :cntrl: ] | ASCLL控制字元(ASCLL 0到31和127) |
[ :digit: ] | 任意數字(同[0-9]) |
[ :graph: ] | 與[ :print: ]相同,但不包括空格 |
[ :lower: ] | 任意小寫字母(同[a-z]) |
[ :print: ] | 任意可列印字元 |
[ :punct: ] | 即不在[ :alnum: ]又不在[ :cntrl: ]中的任意字元 |
類 | 說明 |
---|---|
[ :space: ] | 包括空格在内地任意空白字元 |
[ :upper: ] | 任意大寫字元 |
[ :xdigit: ] | 任意十六進制數字 |
比對多個執行個體
重複元字元
元字元 | 說明 |
---|---|
* | 0個或多個比對 |
+ | 1個或多個比對 |
? | 0個或1個比對 |
{n} | 指定數目的比對 |
{n,} | 不少于指定數目的比對 |
{n,m} | 比對數目的範圍 |
定位符
定位元字元
元字元 | 說明 |
---|---|
^ | 文本的開始 |
$ | 文本的結尾 |
[[: < :]] | 詞的開始 |
[[: > :]] | 詞的結尾 |