mysql必知必會--用正則表達式 進行搜索

来源:https://www.cnblogs.com/ygjzs/archive/2020/01/21/12222515.html
-Advertisement-
Play Games

正則表達式介紹 前兩章中的過濾例子允許用匹配、比較和通配操作符尋找數據。對 於基本的過濾(或者甚至是某些不那麼基本的過濾),這樣就足夠了。但 隨著過濾條件的複雜性的增加, WHERE 子句本身的複雜性也有必要增加。 這也就是正則表達式變得有用的地方。正則表達式是用來匹配文本 的特殊的串(字元集合)。 ...


正則表達式介紹

前兩章中的過濾例子允許用匹配、比較和通配操作符尋找數據。對
於基本的過濾(或者甚至是某些不那麼基本的過濾),這樣就足夠了。但
隨著過濾條件的複雜性的增加, WHERE 子句本身的複雜性也有必要增加。
這也就是正則表達式變得有用的地方。正則表達式是用來匹配文本
的特殊的串(字元集合)。如果你想從一個文本文件中提取電話號碼,可
以使用正則表達式。如果你需要查找名字中間有數字的所有文件,可以
使用一個正則表達式。如果你想在一個文本塊中找到所有重覆的單詞,
可以使用一個正則表達式。如果你想替換一個頁面中的所有URL為這些
URL的實際HTML鏈接,也可以使用一個正則表達式(對於最後這個例子,
或者是兩個正則表達式)。
所有種類的程式設計語言、文本編輯器、操作系統等都支持正則表
達式。有見識的程式員和網路管理員已經關註作為他們技術工具重要內
容的正則表達式很長時間了。
正則表達式用正則表達式語言來建立,正則表達式語言是用來完成
剛討論的所有工作以及更多工作的一種特殊語言。與任意語言一樣,正
則表達式具有你必須學習的特殊的語法和指令

使用MySQL正則表達式

那麼,正則表達式與MySQL有何關係?已經說過,正則表達式的作
用是匹配文本,將一個模式(正則表達式)與一個文本串進行比較。MySQL
用 WHERE 子句對正則表達式提供了初步的支持,允許你指定正則表達式,
過濾 SELECT 檢索出的數據

僅為正則表達式語言的一個子集 如果你熟悉正則表達式,需
要註意:MySQL僅支持多數正則表達式實現的一個很小的子
集。本章介紹MySQL支持的大多數內容。

基本字元匹配

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

除關鍵字 LIKE 被 REGEXP 替代外,這條語句看上去非常像使用
LIKE 的語句(第8章)。它告訴MySQL: REGEXP 後所跟的東西作
為正則表達式(與文字正文 1000 匹配的一個正則表達式)處理

為什麼要費力地使用正則表達式?在剛纔的例子中,正則表達式確
實沒有帶來太多好處(可能還會降低性能),不過,請考慮下麵的例子

這裡使用了正則表達式 .000 。 . 是正則表達式語言中一個特殊
的字元。它表示匹配任意一個字元,因此, 1000 和 2000 都匹配
且返回。
當然,這個特殊的例子也可以用 LIKE 和通配符來完成

LIKE 匹配整個列。如果被匹配的文本在列值
中出現, LIKE 將不會找到它,相應的行也不被返回(除非使用
通配符)。而 REGEXP 在列值內進行匹配,如果被匹配的文本在
列值中出現, REGEXP 將會找到它,相應的行將被返回。這是一
個非常重要的差別。的作用)?答案是肯定的,使用 ^ 和 $ 定位符(anchor)即可,
本章後面介紹。

匹配不區分大小寫 MySQL中的正則表達式匹配(自版本
3.23.4後)不區分大小寫(即,大寫和小寫都匹配)。為區分大
小寫,可使用 BINARY 關鍵字,如 WHERE prod_name REGEXP
BINARY 'JetPack .000'

匹配幾個字元之一

匹配任何單一字元。但是,如果你只想匹配特定的字元,怎麼辦?
可通過指定一組用 [ 和 ] 括起來的字元來完成,如下所示:

這裡,使用了正則表達式 [123] Ton 。 [123] 定義一組字元,它
的意思是匹配 1 或 2 或 3 ,因此, 1 ton 和 2 ton 都匹配且返回(沒
有 3 ton )。
正如所見, [] 是另一種形式的 OR 語句。事實上,正則表達式 [123]Ton
為 [1|2|3]Ton 的縮寫,也可以使用後者。但是,需要用 [] 來定義 OR 語句
查找什麼。為更好地理解這一點,請看下麵的例子:


這並不是期望的輸出。兩個要求的行被檢索出來,但還檢索出
了另外3行。之所以這樣是由於MySQL假定你的意思是 '1' 或
'2' 或 '3 ton' 。除非把字元 | 括在一個集合中,否則它將應用於整個串。
字元集合也可以被否定,即,它們將匹配除指定字元外的任何東西。
為否定一個字元集,在集合的開始處放置一個 ^ 即可。因此,儘管 [123]
匹配字元 1 、 2 或 3 ,但 [^123] 卻匹配除這些字元外的任何東西

匹配範圍

集合可用來定義要匹配的一個或多個字元。例如,下麵的集合將匹
配數字0到9:

這裡使用正則表達式 [1-5] Ton 。 [1-5] 定義了一個範圍,這個
表達式意思是匹配 1 到 5 ,因此返回3個匹配行。由於 5 ton 匹配,
所以返回 .5 ton 。

匹配特殊字元

正則表達式語言由具有特定含義的特殊字元構成。我們已經看到 . 、 [] 、
| 和 - 等,還有其他一些字元。請問,如果你需要匹配這些字元,應該怎麼
辦呢?例如,如果要找出包含 . 字元的值,怎樣搜索?請看下麵的例子

這並不是期望的輸出, . 匹配任意字元,因此每個行都被檢索出
來。為了匹配特殊字元,必須用 \ 為前導。 \- 表示查找 - , \. 表示查找 .

這種處理
就是所謂的轉義(escaping),正則表達式內具有特殊意義的所
有字元都必須以這種方式轉義。這包括 . 、 | 、 [] 以及迄今為止使用過的
其他特殊字元。
\ 也用來引用元字元(具有特殊含義的字元),如表9-1所列。

匹配  為了匹配反斜杠(  )字元本身,需要使用 \ 。
 或 \? 多數正則表達式實現使用單個反斜杠轉義特殊字元,
以便能使用這些字元本身。但MySQL要求兩個反斜杠(MySQL
自己解釋一個,正則表達式庫解釋另一個)。

匹配字元類

存在找出你自己經常使用的數字、所有字母字元或所有數字字母字
符等的匹配。為更方便工作,可以使用預定義的字元集,稱為字元類
(character class)。表9-2列出字元類以及它們的含義

匹配多個實例

目前為止使用的所有正則表達式都試圖匹配單次出現。如果存在一
個匹配,該行被檢索出來,如果不存在,檢索不出任何行。但有時需要
對匹配的數目進行更強的控制。例如,你可能需要尋找所有的數,不管
數中包含多少數字,或者你可能想尋找一個單詞並且還能夠適應一個尾
隨的 s (如果存在),等等
這可以用表9-3列出的正則表達式重覆元字元來完成

定位符

目前為止的所有例子都是匹配一個串中任意位置的文本。為了匹配特定位置的文本,需要使用表9-4列出的定位符

例如,如果你想找出以一個數(包括以小數點開始的數)開始的所
有產品,怎麼辦?簡單搜索 [0-9\.] (或 [[:digit:]\.] )不行,因為
它將在文本內任意位置查找匹配。解決辦法是使用 ^ 定位符,如下所示

^ 匹配串的開始。因此, ^[0-9\.] 只在 . 或任意數字為串中第
一個字元時才匹配它們。

^ 的雙重用途 ^ 有兩種用法。在集合中(用 [ 和 ] 定義),用它
來否定該集合,否則,用來指串的開始處

使 REGEXP 起類似 LIKE 的作用 本章前面說過, LIKE 和 REGEXP
的不同在於, LIKE 匹配整個串而 REGEXP 匹配子串。利用定位
符,通過用 ^ 開始每個表達式,用 $ 結束每個表達式,可以使
REGEXP 的作用與 LIKE 一樣

本章介紹了正則表達式的基礎知識,學習瞭如何在MySQL的 SELECT
語句中通過 REGEXP 關鍵字使用它們


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這是該系列的第一篇文章:在ASP.NET Core 3.0中使用Serilog.AspNetCore。 1. 第1部分 使用 來簡化ASP.NET Core的日誌輸出(本篇文章) 2. 第2部分 使用Serilog記錄所選的端點名稱[敬請期待] 3. 第3部分 使用Serilog.AspNetCor ...
  • 話不多說,先看運行效果: >./term input flag 0x00000500 BRKINT not in ICRNL IGNBRK not in IGNCR not in IGNPAR not in IMAXBEL not in INLCR not in INPCK not in ISTRI ...
  • 據報道三星已經成功研發出有望替代嵌入式快閃記憶體存儲器(eFlash)的嵌入式磁阻隨機訪問記憶體(eMRAM),容量為1Gb,測試晶元的優良率已達90%。 隨著5G物聯網時代的來臨,存儲器領域發展快速,而在這一領域,韓系廠商擁有著比較明顯的優勢。 MRAM晶元是一種以電阻為存儲方式結合非易失性及隨機訪問兩種 ...
  • 思路:一臺Server 2016用作AD+DNS,一臺Server 2016用作Exchange Server 2016 Exchange Server 2016 CU14 安裝路徑:安裝路徑:https://www.microsoft.com/en-us/download/details.aspx ...
  • WEB管理工具 WebVirtMgr WebVirtMgr是一個基於libvirt的Web界面,用於管理虛擬機。它允許您創建和配置新域,並調整域的資源分配。VNC查看器為來賓域提供完整的圖形控制台。KVM是目前唯一支持的虛擬機管理程式。 基礎環境 hosts免密登錄 kvm所用的所有伺服器都需要互相 ...
  • JDK 的安裝系統安裝就不做過多介紹,大家從網上尋找安裝步驟進行安裝,不過我推薦大家進行安裝時選擇桌面圖形化格式進行安裝,方便做一部分操作,同時在安裝過程中選擇英文模式,同時我自己在安裝的過程中發現使用Oracle VM VirtualBox這個虛擬機工具比使用VM工具開發更加方便些 使用工具 系統 ...
  • 造成這種情況的原因有很多,如果直接百度錯誤信息的話,不一定能很快解決問題,所以,出現這種情況,我們可以使用 mysqld console 命令來查看報錯信息,然後根據報錯信息來百度,這樣就很快定位到問題所在。看到以下截圖,我的問題是 Please make sure that directory e ...
  • 推薦閱讀: 論主數據的重要性(正確理解元數據、數據元) CDC+ETL實現數據集成方案 Java實現impala操作kudu 實戰kudu集成impala impala基本介紹 impala是cloudera提供的一款高效率的sql查詢工具,提供實時的查詢效果,官方測試性能比hive快10到100倍 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...