mysql bc_正则表达式——MySQL搜索过滤
正則表達式介紹
在數據庫的數據過濾過程中只用WHERE子句和LIKE操作符都是對于已知值進行的
不管是匹配一個還是多個值,測試大于還是小于已知值,或者檢查某個范圍的值,都是使用已知的值
當然MySQL語句也提供了通配符百分號(%)和下劃線(_)來匹配多個和單個字符
在檢索名中包含某些文本或字符的字段時確實很有用,但是這種功能也是有代價的
因為通配符和搜索的處理一般要比有些搜索所花時間要長,而且會使WHERE子句本身過于復雜
這也就是正則表達式變得有用的地方,所有程序設計語言、文本編輯器、操作系統等都支持正則表達式
正則表達式是用來匹配文本的特殊串,用正則表達式語言來建立,所以這也是你必須所學習的特殊語法和指令
全文閱讀和自己練習嘗試需要大概十五分鐘左右,熟練運用SQL語句中還得需要你自己不斷地積累和使用,希望不會浪費讀者寶貴的時間
通配符小技巧
雖然通配符搜索處理要比其他搜索時間所花時間要長,但是在數據量不大的時候還是建議使用的
這里在講正則表達式之前還是先給出一些使用通配符要記住的技巧:
1. 不要過度使用通配符。如果其他操作符能達到相同的目的,應該使用其他操作符
2. 除非絕對必要,否則不要把他們用在搜索模式的開始處。這樣搜索起來是最慢的
3. 仔細注意通配符的位置。如果放錯地方,可能不會返回想要的數據
學習使用正則表達式
我們從一個簡單的例子開始,下面檢索列Name帶文本aba的部分行
這里我們先提一個問題,正則表達式和通配符匹配區分大小寫嗎?仔細觀察下面檢索的對象,你就知道答案了
這我們看到關鍵字REGEXP聲明后面的東西作為正則表達式處理,就得到了所有Name列包含aba文本的數據,而且你也發現它們是不區分大小寫的
這時候你可能就要問,為什么要那么費力使用正則表達式?在剛才的例子中,沒有體現出帶來的好處,還可能降低性能,也確實沒有以下通配符的方法簡單
SELECT *
FROM city
WHERE Name LIKE '%aba%'
ORDER BY Name
LIMIT 10;
接下來,請考慮接下來的這些例子
這里使用了正則表達式.East。.是正則表達式中的一個特殊字符,表示匹配任意一個字符
|是正則表達式的OR操作,它表示匹配其中之一,多個OR條件可以并入單個正則表達式。
從這里開始終于開始有屬于正則表達式自己獨有的匹配方式了
這里大家應該就有些看不懂這有些復雜的正則表達式了,所以接下來介紹所有正則表達式的其他語法
中括號
中括號中添加可以匹配的字符,但是本身只能匹配一個其中一個字符,比如說[123]就是匹配1、2或3
還可以匹配范圍,為了簡化[123456789]這種過于冗長的集合,可使用-來定義一個范圍,比如說[1-9]和剛才的集合是一樣的
標識符
^ :有兩個作用,一個是在集合中表示否定該集合,一個是作為定位符表示指文本的開始處
[^123] :匹配除了1、2或3這些字符外的其他東西
^a :文本的開頭是a字符
$ :和^相反,這是文本結尾的標識符
匹配特殊字符
為了匹配特殊字符,必須用\為前導,這種處理就是所謂的轉義,這樣也存在了很多空白元字符
\f:換頁
\n:換行
\r:回車
\t:制表
\v:縱向制表
多數正則表達式都是用單反斜杠轉義,而MySQL要求兩個是因為自己解釋一個,正則表達庫解釋另一個
匹配字符類
為了方便工作,可以使用預定義的字符集,成為字符類
[:alnum:]:任意字母或者數字
[:alpha:]:任意字符
[:blank:]:空格和制表
[:cntrl:]:ASCII控制字符
[:digit:]:任意數字
[:graph:]:與[:print:]相同,但是不包括空格
[:lower:]:任意小寫字母
[:print:]:任意可打印字符
[:punct:]:不在[:alnum:],但又在[:cntrl:]的任意字符
[:space:]:包括空格在內的任意空白字符
[:upper:]:任意大寫字母
[:xdigit:]:任意十六進制數字
匹配多個實例
目前為止所有的正則表達式都試圖匹配單次出現,但是有時需要對匹配的數目進行更強的控制
*:0個或多個匹配
+:一個或多個匹配
?:0個或1個匹配
{n}:指定數目的匹配
{n,}:不少于指定數目的匹配
{n,m}:匹配數目的范圍
總結
以上基本就是常用到的MySQL正則表達式語法了,如果說你還沒有合適的表來做練習,這里還有一個簡單的測試方法
SELECT 'hello' REGEXP '[0-9]'
REGEXP檢查總是返回0(沒有匹配)或者1(匹配),所以顯然這個語句的答案是返回0
總結下來你會發現,REGEXP和LIKE的不同在于,LIKE匹配整個串,而REGEXP匹配子串
正則表達式涉及的范圍是很廣的,本人在自學Linux的Bash編程時也是常常用到它,所以這是你必須掌握的技能
文章如果存在問題或者有其他可以添加的語法,希望大佬斧正和評論,希望我和大家一起進步一起優秀
總結
以上是生活随笔為你收集整理的mysql bc_正则表达式——MySQL搜索过滤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 股票圆弧底部形态特征?
- 下一篇: linux查看文件数量命令(linux查