最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL使用正則表達(dá)式來更好地控制數(shù)據(jù)過濾

 更新時間:2024年08月12日 10:25:13   作者:M?malloc  
MySQL中的正則表達(dá)式是一種強(qiáng)大的數(shù)據(jù)過濾工具,它允許用戶以靈活的方式匹配和搜索文本數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于MySQL使用正則表達(dá)式來更好地控制數(shù)據(jù)過濾的相關(guān)資料,需要的朋友可以參考下

本章詳情

本文章將學(xué)習(xí)如何在MySQL WHERE子句內(nèi)使用正則表達(dá)式來更好地控制數(shù)據(jù)過濾。

正則表達(dá)式介紹

前言

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

使用MySQL正則表達(dá)式

那么,正則表達(dá)式與MySQL有何關(guān)系?在上述前言已經(jīng)說過,正則表達(dá)式的作用是匹配文本,將一個模式(正則表達(dá)式)與一個文本串進(jìn)行比較。MySQL用WHERE子句對正則表達(dá)式提供了初步的支持,允許你指定正則表達(dá)式過濾SELECT檢索出的數(shù)據(jù)

僅為正則表達(dá)式語言的一個子集

如果你熟悉正則表達(dá)式,需要注意:MySOL僅支持多數(shù)正則表達(dá)式實現(xiàn)的一個很小的子集。本章介紹MySOL支持的大多數(shù)內(nèi)容。

舉例子分析

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

輸入

SELECT prod_name FROM products
	WHERE prod_name REGEXP '1000'
		ORDER BY prod_name;

分析

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

輸出

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

輸入

SELECT prod_name FROM products
	WHERE prod_name REGEXP '.000'
		ORDER BY prod_name;

輸出

分析

這里使用了正則表達(dá)式.000。.是正則表達(dá)式語言中一個特殊的字符。它表示匹配任意一個字符,因此,1000和2000都匹配且返回

匹配不區(qū)分大小寫

MySQL中的正則表達(dá)式匹配(自版本3.23.4后)不區(qū)分大小寫(即,大寫和小寫都匹配)為區(qū)分大小寫,可使用BINARY關(guān)鍵字,如WHERE prod_name REGEXP BINARY ‘JetPack .000’

進(jìn)行OR匹配

搜索兩個串之一(或者為這個串,或者為另一個串),使用|,如下所示:

輸入

SELECT prod_name FROM products
	WHERE prod_name REGEXP '1000|2000'
		ORDER BY prod_name;

輸出

分析

語句中使用了正則表達(dá)式1000|2000。|為正則表達(dá)式的OR操作符。它表示匹配其中之一,因此1000和2000都匹配并返回

注意

使用|從功能上類似于在SELECT語句中使用OR語句,多個OR條件可并入單個正則表達(dá)式。

兩個以上的OR條件

例如兩個以上的OR條件1000 | 2000 | 3000將匹配1000或2000或3000

匹配幾個字符之一

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

輸入

SELECT prod_name FROM products
	WHERE prod_name REGEXP '[123] Ton'
		ORDER BY prod_name;

輸出

分析

這里,使用了正則表達(dá)式[123] Ton。[123]定義一組字符它的意思是匹配1或2或3,因此,1 ton和2 ton都匹配且返回(沒有3 ton)。

正如所見,[]是另一種形式的OR語句。事實上,正則表達(dá)式[123]Ton為[1|2|3]Ton的縮寫,也可以使用后者。但是,需要用[]來定義OR語句查找什么。為更好地理解這一點,請看下面的例子:

輸入

SELECT prod_name FROM products
	WHERE prod_name REGEXP '1|2|3 Ton'
		ORDER BY prod_name;

輸出

分析

這并不是期望的輸出。兩個要求的行被檢索出來,但還檢索出了另外3行。之所以這樣是由于MySQL假定你的意思是1或2或3 ton’。除非把字符1括在一個集合中,否則它將應(yīng)用于整個串

字符集合也可以被否定,即,它們將匹配除指定字符外的任何東西為否定一個字符集,在集合的開始處放置一個^即可。因此,盡管[123]匹配字符1、2或3,但[ ^123]卻匹配除這些字符外的任何東西。

匹配范圍

提示

集合可用來定義要匹配的一個或多個字符。例如,下面的集合將匹配數(shù)字0到9:[0123456789]

  • 為簡化這種類型的集合,可使用-來定義一個范圍。下面的式子功能上等同于上述數(shù)字列表:[0-9]
  • 范圍不限于完整的集合,[1-3]和[6-9]也是合法的范圍。此外,范圍不一定只是數(shù)值的,[a-z]匹配任意字母字符。

輸入

SELECT prod_name FROM products 
	WHERE prod_name REGEXP '[1-5] Ton'
		ORDER BY prod_name;

輸出

分析

這里使用正則表達(dá)式[1-5] Ton。[1-5]定義了一個范圍,這個表達(dá)式意思是匹配1到5,因此返回3個匹配行。由于5 ton匹配,所以返回.5 ton。

匹配特殊字符

正則表達(dá)式語言由具有特定含義的特殊字符構(gòu)成。我們已經(jīng)看到.[]、|和-等,還有其他一些字符。請問,如果你需要匹配這些字符,應(yīng)該怎么辦呢?例如,如果要找出包含.字符的值,怎樣搜索?請看下面的例子:

輸入

SELECT vend_name FROM vendors
	WHERE vend_name REGEXP '.'
		ORDER BY vend_name;

輸出

分析

這并不是期望的輸出,.匹配任意字符,因此每個行都被檢索出來。

為了匹配特殊字符,必須用11為前導(dǎo)。1l-表示查找-, 表示查找.

輸入

SELECT vend_name FROM vendors
	WHERE vend_name REGEXP '\\.'
		ORDER BY vend_name;

輸出

分析

這才是期望的輸出。ll.匹配.,所以只檢索出一行。這種處理就是所謂的轉(zhuǎn)義 (escaping),正則表達(dá)式內(nèi)具有特殊意義的所有字符都必須以這種方式轉(zhuǎn)義。這包括.、1、[]以及迄今為止使用過的其他特殊字符。

匹配字符類

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

字符類*

匹配多個實例

概要

目前為止使用的所有正則表達(dá)式都試圖匹配單次出現(xiàn)。如果存在一個匹配,該行被檢索出來,如果不存在,檢索不出任何行。但有時需要對匹配的數(shù)目進(jìn)行更強(qiáng)的控制。例如,你可能需要尋找所有的數(shù),不管數(shù)中包含多少數(shù)字,或者你可能想尋找一個單詞并且還能夠適應(yīng)一個尾隨的s(如果存在),等等。

重復(fù)元字符

舉例分析

下面舉幾個例子。

輸入

SELECT prod_name FROM products
	WHERE prod_name REGEXP '\\([0-9] sticks?\\)'
		ORDER BY prod_name;

輸出

分析

正則表達(dá)式1([0-9] sticks?\)需要解說一下。l1(匹配)[0-9]匹配任意數(shù)字(這個例子中為1和5),sticks?匹配stick和sticks (s后的?使s可選,因為?匹配它前面的任何字符的0次或1次出現(xiàn)),\)匹配)。沒有?,匹配stick和sticks會非常困難。

定位符

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

定位符表

舉例概述

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

輸入

SELECT prod_name FROM products
	WHERE prod_name REGEXP '^[0-9\\.]'
		ORDER BY prod_name;

匹配串的開始。因此,^ [0-91\.]只在或任意數(shù)字為串中第一個字符時才匹配它們。沒有^,則還要多檢索出4個別的行(那些中間有數(shù)字的行)。

如何鞏固學(xué)習(xí)

提示:在學(xué)習(xí)的過程中,我們需要先自行進(jìn)行思考,而不是一遇到不會的就放棄思考直接看答案,如果最后遇到真的不會的題目,我們可以適當(dāng)?shù)倪M(jìn)行觀看答案,看自己的思路是否正確,在作出正確的判斷

總結(jié)

到此這篇關(guān)于MySQL使用正則表達(dá)式來更好地控制數(shù)據(jù)過濾的文章就介紹到這了,更多相關(guān)MySQL正則表達(dá)式進(jìn)行搜索內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL實現(xiàn)字段分割一行轉(zhuǎn)多行的示例代碼

    MySQL實現(xiàn)字段分割一行轉(zhuǎn)多行的示例代碼

    這篇文章主要介紹了MySQL實現(xiàn)字段分割一行轉(zhuǎn)多行的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • MySQL數(shù)據(jù)庫學(xué)習(xí)之排序與單行處理函數(shù)詳解

    MySQL數(shù)據(jù)庫學(xué)習(xí)之排序與單行處理函數(shù)詳解

    這篇文章主要為大家詳細(xì)介紹一下MySQL數(shù)據(jù)庫中排序與單行處理函數(shù)的使用,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)MySQL有一定幫助,需要的可以參考一下
    2022-07-07
  • Linux操作系統(tǒng)操作MySQL常用命令小結(jié)

    Linux操作系統(tǒng)操作MySQL常用命令小結(jié)

    本文給大家分享Linux操作系統(tǒng)操作MySQL常用命令小結(jié),需要的朋友參考下吧
    2017-07-07
  • mysql遠(yuǎn)程登錄root賬戶報錯1045的解決

    mysql遠(yuǎn)程登錄root賬戶報錯1045的解決

    這篇文章主要介紹了mysql遠(yuǎn)程登錄root賬戶報錯1045的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Mysql使用簡單教程(二)

    Mysql使用簡單教程(二)

    這篇文章主要介紹了Mysql使用簡單教程(二)的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • mysql錯誤處理之ERROR 1786 (HY000)

    mysql錯誤處理之ERROR 1786 (HY000)

    最近一直在mysql的各個版本直接徘徊,這中間遇到了各種各樣的錯誤,將已經(jīng)處理完畢的幾個錯誤整理了一下,分享給大家,首先我們來看看錯誤提示 ERROR 1786 (HY000)
    2014-07-07
  • 淺談MySQL中使用IN會走索引嗎

    淺談MySQL中使用IN會走索引嗎

    本文主要介紹了淺談MySQL中使用IN會走索引嗎,通過三個案例分析了MySQL 5.7.34版本中IN操作符的執(zhí)行情況,感興趣的可以了解一下
    2025-02-02
  • linux下perl操作mysql數(shù)據(jù)庫(需要安裝DBI)

    linux下perl操作mysql數(shù)據(jù)庫(需要安裝DBI)

    有時候需要perl操作mysql數(shù)據(jù)庫,可以通過DBI實現(xiàn),需要的朋友可以參考下
    2012-05-05
  • MySQL查看使用的內(nèi)存情況的幾種方法

    MySQL查看使用的內(nèi)存情況的幾種方法

    本文主要介紹了MySQL查看使用的內(nèi)存情況的幾種方法,主要介紹了5種查看方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • mysql中插入表數(shù)據(jù)中文亂碼問題的解決方法

    mysql中插入表數(shù)據(jù)中文亂碼問題的解決方法

    mysql是我們項目中非經(jīng)常常使用的數(shù)據(jù)型數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于mysql中插入表數(shù)據(jù)中文亂碼問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09

最新評論

施甸县| 淅川县| 柳河县| 布尔津县| 轮台县| 龙井市| 黄陵县| 西宁市| 长子县| 邢台市| 济宁市| 清新县| 昂仁县| 肃南| 桦川县| 永康市| 齐河县| 禹州市| 桂平市| 威信县| 邳州市| 庆元县| 泗洪县| 呼玛县| 彰武县| 永济市| 太原市| 蒲城县| 渝北区| 鱼台县| 绥德县| 盐池县| 康定县| 金阳县| 吉安县| 柏乡县| 宝兴县| 广河县| 郸城县| 涿鹿县| 龙陵县|