mysql 字串正則匹配 mysql正規表示式

2021-10-17 15:55:27 字數 3285 閱讀 7565

預備閱讀:

mysql中用正規表示式進行搜尋1、使用mysql正規表示式(1)基本字串匹配

select prod_name

from products

where prod_name regexp 『1000』

order by prod_name;

檢索prod_name包含文字1000的所有行。

除關鍵字like被regexp替代外,這條語句看上去非常像使用

like的語句(第8章)。它告訴mysql: regexp後所跟的東西作

為正規表示式(與文字正文1000匹配的乙個正規表示式)處理。

select prod_name

from products

where prod_name regexp 『.000』

order by prod_name;

正則中,.代表匹配任意乙個字元。

區分大小寫時:使用binary關鍵字

where prod_name regexp binary 『jetpack .000』;

(2)進行or匹配(使用『|』)

select prod_name

from products

where prod_name regexp 『1000|2000』

order by prod_name;

可使用多個。

(3)匹配幾個字元之一

用[和]括起來的字元完成

select prod_name

from products

where prod_name regexp 『[123] ton』

order by prod_name;

是另一種形式的or語句。 事實上,正規表示式[123]ton

為[1|2|3]ton的縮寫,也可以使用後者。但是,需要用來定義or語句查詢什麼。

select prod_name

from products

where prod_name regexp 『1|2|3 ton』

order by prod_name;

(4)匹配範圍

下面的集合將匹配數字0到9:[0-9],a到z:[a-z]

select prod_name

from products

where prod_name regexp 『[1-5] ton』

order by prod_name;

(5) 匹配特殊字元

必須用\\為前導,\\-表示查詢-,.

select vend_name

from vendors

where vend_name regexp 『\\.』

order by vend_name;

這種處理就是所謂的轉義( escaping),正規表示式內具有特殊意義的所有字元都必須以這種方式轉義。

匹配\ 為了匹配反斜槓( \)字元本身,需要使用\\\。

元 字 符 說 明

\\f 換頁

\\n 換行

\\r 回車

\\t 製表

\\v 縱向製表

(6)匹配字元類

存在找出你自己經常使用的數字、所有字母字元或所有數字字母字

符等的匹配。為更方便工作,可以使用預定義的字符集,稱為字元類

( character class)。

字元類 說 明

[:alnum:] 任意字母和數字(同[a-za-z0-9])

[:alpha:] 任意字元(同[a-za-z])

[:blank:] 空格和製表(同[\\t])

[:cntrl:] ascii控制字元( ascii 0到31和127)

[:digit:] 任意數字(同[0-9])

[:graph:] 與[:print:]相同,但不包括空格

[:lower:] 任意小寫字母(同[a-z])

[:print:] 任意可列印字元

[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字元

[:space:] 包括空格在內的任意空白字元(同[\\f\\n\\r\\t\\v])

[:upper:] 任意大寫字母(同[a-z])

[:xdigit:] 任意十六進製制數字(同[a-fa-f0-9])

(7)匹配多個例項

重複元字元

元字元 說 明

* 0個或多個匹配

+ 1個或多個匹配(等於)

? 0個或1個匹配(等於)

指定數目的匹配

不少於指定數目的匹配

匹配數目的範圍( m不超過255)

select prod_name

from products

where prod_name regexp 『\\([0-9] sticks?\\)』

order by prod_name;

正規表示式\\([0-9] sticks?\\)需要解說一下。 \\(匹配),[0-9]匹配任意數字(這個例子中為1和5), sticks?匹配stick和sticks( s後的?使s可選,因為?匹配它前面的任何字元的0次或1次出現), \\)匹配)。沒有?,匹配stick和sticks會非常困難。

匹配連在一起的4位數字:

select prod_name

from products

where prod_name regexp 『[[:digit:]]』

order by prod_name;

[:digit:]匹配任意數字,因而它為數字的乙個集合。 確切地要求它前面的字元(任意數字)出現4次,所以[[:digit:]]匹配連在一起的任意4位數字。或者如下

select prod_name

from products

where prod_name regexp 『[0-9] [0-9] [0-9] [0-9]』

order by prod_name;

(8)定位符

匹配特定位置的文字,需要使用定位元字元。

元字元說明

^ 文字的開始

$ 文字的結尾

[[:>:]] 詞的結尾

select prod_name

from products

where prod_name regexp 『^[0-9\\.]』

order by prod_name;

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

乙個字元時才匹配它們。

^的雙重用途^有兩種用法。在集合中(用[和]定義),用它

來否定該集合,否則,用來指串的開始處。

**:

字串正則匹配

匹配1個或多個 匹配乙個 abc a b false abc a?c true abc a true ab a false 重點就是處理掉 如果匹配的時候 後面沒有字元了那返回真,如果有的話,那麼很簡單,從str中從後往前拿pattern 中 從 開始到pattern末尾個字元個數的字元,繼續遞迴匹...

正則匹配字串無匹配不到 字串匹配演算法

我們先說下定義,比如說我們要在a字串中查詢字串b,那麼a就是主串,b就是模式串 我們把主串的長度記為n,把模式串的長度記為m,n m bf brute force 中文名 暴力匹配演算法,樸素匹配演算法 簡單的說bf的演算法就是在主串中查詢起始位置是0,1,2,n m個且長度為m的n m 1個子串,...

正則匹配字串小記

需求1.現有 裝置名 dev.json 裝置名 廠商名 型號名 dev.json 裝置名.json 廠商名 型號名.json 型號名 廠商名.json 裝置名 廠商名 bu.json 等字串,要求匹配出符合規則的字串,並且根據傳入的裝置名或者廠商名或者型號名講字串中對應的內容修改。裝置名 字串規則 ...