日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql bc_正则表达式——MySQL搜索过滤

發布時間:2023/12/2 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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搜索过滤的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。