mysql正則表達式


預備閱讀:

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個或多個匹配(等於{1,})

? 0個或1個匹配(等於{0,1})

{n} 指定數目的匹配

{n,} 不少於指定數目的匹配

{n,m} 匹配數目的范圍( 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:]]{4}’

ORDER BY prod_name;

[:digit:]匹配任意數字,因而它為數字的一個集合。 {4}確切地要求它前面的字符(任意數字)出現4次,所以[[:digit:]]{4}匹配連在一起的任意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\\.]只在.或任意數字為串中第

一個字符時才匹配它們。

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

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

轉自:

http://www.sohu.com/a/126778580_624356


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM