mysql中用正規表示式進行搜尋教學(一)

巴扎黑
發布: 2017-05-02 18:17:59
原創
1631 人瀏覽過

本文專題將學習如何在MySQL where子句內使用正規表示式來跟好的控制資料過濾。

有關正規表示式介紹

前兩章中的篩選範例允許以符合、比較和通配運算子尋找資料。對於基本的過濾(或甚至是某些不那麼基本的過濾),這樣就足夠了。但隨著過濾條件的複雜性的增加,where子句本身的複雜性也不要增加。

這也就是正規表示式變得有用的地方。正規表示式是用來匹配文字的特殊的字串(字元集合)。如果你想從一個文字檔案中提取出電話號碼,可以使用正規表示式。如果你需要找出名字中間有數字的所有文件,可以使用一個正規表示式。如果你想在一個文板塊中找到所有重複的單詞,可以使用正規表示式。如果你想途歡一個頁面中的所有URL為這些URL的實際html連接,也可以使用正規表示式。

所有又累的程式設計語言、文字編輯器、作業系統等都支援正規表示式。有件事的程式設計師和網路管理員已經關注作為他們技術工具重要內容的正規表示式很久了。

正規表示式用正規表示式語言來建立,正規表示式語言是用來完成剛討論的所有工作及更多工作的一種特殊語言、與任意語言一樣,正規表示式具有你必須學習的特殊的語法和指令。

既然正規表示式這麼有用,那麼正規表示式和MySQL有什麼關係呢?已經說過,正規表示式的作用是匹配文本,講一個模式(正則表達式)與一個文本串進行比較。 MySQL用where子句對正規表示式提供了初步的支持,讓你指定正規表示式,過濾select檢索出的資料。

使用MySQL正規表示式

基本字元符合

我們從一個非常簡單的範例開始。下面的語句檢索列prod_name包含文字1000的所有行:

select prod_name from products where prod_name regexp '1000' order by prod_name;

mysql中用正規表示式進行搜尋教學(一)

#除了關鍵字like被regexp取代以外,這語句看起來非常像使用like的語句。它告訴MySQL:regexp後面所跟的東西當作正規表示式(與文字正文1000相符的正規表示式)處理。

為什麼要費力地使用正規表示式?在剛才的例子中,正規表示式確實沒有帶來太多好處,不過請考慮下面的例子:

select prod_name from products where prod_name regexp '.000'order by prod_name;

mysql中用正規表示式進行搜尋教學(一)

這裡使用了正規表示式.000。 .是正規表示式語言中一個特殊的字元。它表示匹配任意一個字符,因此,1000和2000都匹配且返回

當然,這個特殊的例子也可以用like和通配符來完成。

在like與regexp之間有一個重要的差異。請看下面兩個語句:

select prod_name from products where prod_name like '1000' order by prod_name;

select prod_name from products where prod_name regexp '1000' order by prod_name;

##如果執行上述兩個語句,會發現第一個語句不會傳回數據,而第二條語句回傳一行,為什麼?

like符合整個列。如果被符合的文字在列值中出現,like將不會找到它,對應的行也不被傳回(除非使用通配符)。而regexp在列值內進行匹配,如果被匹配的文字在列值中出現,regexp將會找到它,則相應的行將會傳回。這是一個非常重要的差別。

那麼,regexp能不能用來匹配整個列值,起到與like相同的作用?答案是坑定的,使用^和$定位符即可。

以上是mysql中用正規表示式進行搜尋教學(一)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板