[TOC=1,5]
>[success] # 什么是regexp
>正則表達式是用來匹配文本的特殊的字符集合,如果想從一個文本文件中提 取電話號碼,可以使用正則表達式來完成。
正則表達式的作用是匹配文本,將一個正則表達式與一個文本串進行比較, MySQL 用 where 子句對正則表達式提供支持,允許指定正則表達式過濾 select 查找出的數據。
<br>
* * * * *
>[success] # regexp和like區別
>在 where 中可以使用 LIKE 和 REGEXP 來匹配特定的內容,但是 LIKE 匹配 整列數據,REGEXP 可以匹配列中任意位置的文本,REGEXP 更靈活強大。
MySQL 中正則表達式不區分大小寫。
* * * * *
>[success] # 語法
`在 where 子句中使用 REGEXP 關鍵字,后面接正則表達式字符 `
<br>
>[danger] ##### 包含文本匹配-regexp
`SELECT * FROM products WHERE prod_name REGEXP '100';`
**圖片信息**:

**注**:
查詢prod_name字段中包含100 的內容,如果條件換成10,1000等都會查出這條信息,因為都是包含關系
<br>
>[danger] ##### 或文本匹配-|
`SELECT * FROM products WHERE prod_name REGEXP '1000|2000';`
**圖片信息**:

**注**:
當使用like做查詢結果一致的操作語法
`SELECT * FROM products WHERE prod_name LIKE '%1000%' OR prod_name LIKE '%2000%';`
<br>
>[danger] ##### 文字中其中一個匹配-[]
`SELECT * FROM products WHERE prod_name REGEXP '[123] Ton';`
**圖片信息**:

**注**:
正則表達式[123] Ton ,[123]定義一組字符,它的意思是匹配 1 或 2 或 3, 因此,1 ton 和 2 ton 都匹配并且返回。
<br>
>[danger] ##### 不匹配文字中任意一個-[^]
`SELECT * FROM products WHERE prod_name REGEXP '[^123] Ton';`
**圖片信息**:

**注**:
和not的區別
`SELECT * FROM products WHERE prod_name NOT REGEXP '[123] Ton';`
這個語句的含義
除了1或2或3和ton組成的內容查詢結果集
上面 我們用的非not是匹配到的 可能是5ton之類的反正開頭不能是123,結尾必須是Ton
<br>
>[danger] ##### 匹配一個范圍-[1-9] [a-z]
`SELECT * FROM products WHERE prod_name REGEXP '[1-5] Ton';`
**圖片信息**:

**注**:
1.匹配一個范圍,使用集合操作,[1-9] 表示匹配 1 到 9 之間的任意一個 數字,[a-z]表示匹配 a 到 z 之間的任意一個字符
2.不存在[1-311 ]1到311,只會匹配到1-3 和11
<br>
>[danger] ##### 匹配所有字符-.
`SELECT * FROM products WHERE prod_name REGEXP '.';`
**圖片信息**:

**注**:
1. 小數點表示匹配所有
2. 如果想匹配小數點用轉移符號//.
<br>
* * * * *
>[success]# 一些正則表達式里面支持的字符類
>用法:
>SELECT * FROM products WHERE prod_name REGEXP '[[:digit:]]{2}';
>雖然匹配到了1000 但實際匹配的是10 因為00屬于本身字符串造成感覺匹配到了1000,注意用[]再次包裹

>[danger] ##### [:alnm:] 任意字母和數字等同[a-zA-Z0-9]
>[danger] ##### [:alpha:] 任意字符[a-zA-Z]
>[danger] ##### [:blank:]空格和制表符等同[\\\t]
>
>[danger] ##### [:cntrl:] ASCII控制制表同ASCII 0-31 和127
>
>[danger] ##### [:lower:] 任意小寫[a-z]
>
>[danger] ##### [:upper:] 任意大寫[A-Z]
>

