正則表達式的作用是匹配文本,將一個模式(正則表達式)與一個文本串進行比較。
1. 基本的字符匹配
- regexp後面所跟的內容作爲正則表達式。
- '.' 是正則表達式中一個特殊的字符,表示匹配任意一個字符,注意:只是一個。
- 匹配不區分大小寫,如果需要區分,需要使用binary關鍵字。
select column1 from TABLE where column2 regexp '9999';
--'.'匹配任意【一個】字符
select column1 from TABLE where column2 regexp '.999';
--不區分大小寫
select column1 from TABLE where column2 regexp 'Hello World';
--需要區分大小寫時,使用binary
select column1 from TABLE where column2 regexp binary 'Hello World';
2. 進行or匹配-使用'|'
- 匹配模式:'exp1 | exp2 | exp3......| expn'
- 功能類似於or語句,多個or條件可以併入單個正則表達式
select column1 from TABLE where column2 regexp 'keyword1|keyword2|keyword3';
3. 匹配幾個字符之一-使用'[]'
- []是另外一種形式的or語句,匹配模式:'[exp1exp2exp3......expn]'
- 匹配指定集合中的任意一個字符:'[exp1exp2exp3......expn]'
- 匹配指定集合以外的字符:在集合的開始處加入'^':'[^exp1exp2exp3......expn]'
4. 匹配範圍-使用'-'
- 使用'-'來定義一個範圍,匹配模式:'[m-n]'
- 匹配數字0-9:[0-9]等價於[0123456789]
- 匹配字母:[a-z]
5. 匹配特殊字符-使用'\\'
- 使用'\\'來對字符進行轉義,MySQL要求使用兩個反斜槓,MySQL解釋一個,正則表達式解釋一個。
元字符 | \\f | \\n | \\r | \\t | \\v |
說明 | 換頁 | 換行 | 回車 | 製表 | 縱向製表 |
6. 匹配字符類
[:digit :] | 任意數字,同[0-9] |
[:lower:] | 任意小寫字母,同[a-z] |
[:upper:] | 任意大寫字母 |
[:alnum:] | 任意字母和數字,同[a-zA-Z0-9] |
[:space:] | 包括空格在內的任意字符 |
7. 匹配多個實例
使用重複字符元,來實現對匹配數目的更強控制。
元字符 | 說明 |
* | 0個或者多個匹配 |
+ | 1個或者多個匹配,同{1,} |
? | 匹配位於?前面字符的0個或者1個,同{0,1}, |
{n} | 匹配前面字符的n個 |
{n,} | 匹配不少於n個 |
{n,m} | 匹配數目的範圍,m不超過255 |
8. 定位符
使用定位元字符來匹配指定位置的文本
元字符 | 說明 |
^ | 文本的開始 |
$ | 文本的結尾 |
[[:<:]] | 詞的開始 |
[[:>:]] | 詞的結尾 |
9. 簡單的正則表達式測試
--regexp 的返回結果:0(不匹配);1(匹配)
--輸入:
select 'puhan is a pig?' regexp 'is';
--輸出:
+-------------------------------+
| 'puhan is a pig?' regexp 'is' |
+-------------------------------+
| 1 |
+-------------------------------+