正則表示式regex筆記(附練習網站、視覺化圖解)
正則表示式regex筆記
文章目錄
1. 正則表示式含義
1.1 什麼是正則表示式
- 定義一種搜尋模式的字元序列
- 用來匹配一系列符合某個規則的字串的表示式
1.2 使用場景
- 資料庫欄位內容匹配
- 複雜資訊過濾,提取有效資訊
- 爬蟲
2. 正則的結構
2.1 元字元
元字元 | 描述 | 備註 |
---|---|---|
. | 匹配任意單個字元 | 不匹配換行 |
[] | 種類字元,匹配方括號內的任意字元 | |
[^] | 否定種類字元,匹配除了方括號內的任意字元 | |
* | 匹配大於等於0個重複的在*號之前的字元 | |
+ | 匹配大於等於1個重複的在+號之前的字元 | |
? | 標記在?之前的字元為可選 | 出現0次或1次 |
{n,m} | 限定一個或者一組字元出現的次數 | {0,m}、{n,} |
(abc) | 字符集,匹配與abc 完全相等的字串 | |
| | 或運算 | |
\ | 轉義字元,轉義緊跟其後的字元{ } [ ] / \ + * . $ ^|? | java中\也需要轉義 |
^ | 從開始行開始匹配 | |
$ | 從末端開始匹配 |
2.2 “三叉戟”結構
-
錨點:指定模式位置,指定匹配開頭或結尾的字串。
^
指定開頭,$
指定結尾^
插入符號:模式固定到行首,檢查匹配字串是否在開頭。
^a
代表以a開頭的任意行、^(a|A)n
代表以an 或An開頭的字串$
美元符號:模式固定到句尾,檢查匹配字元是否在最後。
b$
匹配以b結尾的字串、$b
只是單純的美元符號後跟著一個b的字串 -
字符集:一組元素[0-9]、[a-z]、[A-Z]類似這樣
-
修飾符:用於指定額外的匹配策略。(不細介紹,參考菜鳥教程)
2.3 簡寫字符集
簡寫 | 描述 | 簡寫 | 描述 |
---|---|---|---|
\w | 匹配所有字母數字,等同於[a-zA-Z0-9_] | \W | 匹配所有非字母數字,即符號 |
\d | 匹配數字[0-9] | \D | 匹配非數字[^\d] |
\s | 匹配所有空格字元[\t\n\f\r\p{Z}] | \S | 匹配所有非空格字元 |
\f | 匹配一個換頁符 | \n | 匹配一個換行符 |
\r | 匹配一個回車符 | \t | 匹配一個製表符 |
\v | 匹配一個垂直製表符 | \p | 匹配CR/LF(等同於\r 、\n ) |
2.4 零寬度斷言
參考:github正則
3. 常見的正則表示式歸納
3.1 匹配小數或整數
-?\d+(\\.\d+)?
解析:
-?
:負號可選、\d+
:匹配一個以上數字、(\.\d+)?
:小數部分,包含小數點(可選)
3.2 匹配年月日,例如:2020-10-20
^[1-9]\d{0,3}-(1[0-2]|0[1-9])-([0-3]\d)
說明:結果只針對例子,具體視情況而定
3.3 匹配11位手機號
^1\d{10}$
、^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$
解析:以1開頭,後面十位數字;後一個比較符合實際號碼段,
\\d
中第一個\是java中的轉義符
3.4 匹配中國郵政編碼
\d[0-79]\d{4}
、\d(9|[0-7])\d{4}
解析:我國郵政編碼的規則:前兩位是省市自治區,第三位代表郵區,第四位代表縣市,最後兩位代表投遞郵局,總共6為數字。其中第二位不為8(港澳前兩位為99,其餘為0-7)
3.5 身份證號碼
[1-8]\d{5}((18|19|20))?\d{2}[0-1]\d[0-3]\d{4}
解析:可能是15位或者18位。前六位是戶口所在地的編碼,其中第一位是1-8,此後是出生年月日,出生年份的前兩位只能是18、19、20,且是可選的,月份的第一位只能是0、1,日期的第一位只能是0-3;最後一位是校驗位是數字或者是X,是可選的
3.6 電子郵件驗證
^[a-zA-Z0-9_.-][email protected][a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$
說明:具體按需求的要求來。
3.7 IP地址驗證
(2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2}
解析:IP地址範圍0.0.0.0~255.255.255.255
(2(5[0-5]|[0-4]\d))
:匹配200-255
[0-1]?\d{1,2}
:匹配0-199
4. 推薦的練習及測試正則的網站
4.1 學習網站
github-Learn-regex中文版:GitHub上比較好的正則介紹及使用手冊
知乎LeetCode回答:以故事方式敘述正則,生動形象,適合初學者閱讀(力扣LeetCode的回答)
Regulex:一個非常好用的圖形化正則顯示,絕對讓你豁然開朗!
4.2 練習網站
RegexOne:英文網站,可翻譯。正則基礎,附帶隨堂測試,不會做可實時檢視Solution有答案,含電話校驗、網址校驗、日誌校驗等案例。
Regexr:提供正則測試,可以編寫正則,網站會給正則表示式新增樣式,自動在文字中搜索模式串,高亮顯示匹配的字串,並且還會顯示每個分組捕獲的字串,很推薦使用。