1. 程式人生 > 實用技巧 >正則表示式regex筆記(附練習網站、視覺化圖解)

正則表示式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:提供正則測試,可以編寫正則,網站會給正則表示式新增樣式,自動在文字中搜索模式串,高亮顯示匹配的字串,並且還會顯示每個分組捕獲的字串,很推薦使用。