之前在linux中用到三劍客grep、awk、sed等,簡單的接觸過正規表達式,但是沒有深入的了解正規表達式,又一次在python裡面接觸到正規表達式,是以想着盡量一次攻克正規表達式,是以就将自己學習印記留在此處,供自己複習,同時也将相關知識分享給大家。
分享幾個線上測試與學習正則的位址:
(1)http://deerchao.net/tutorials/regex/regex.htm 正規表達式30分鐘入門
(2)http://tool.oschina.net/regex/ 線上測試以及有部分簡單示例
(3)http://tool.chinaz.com/regex/ 線上測試工具
(4)http://www.ip138.com/zhengze/ 線上測試工具 推薦
(5)http://www.kingshang.com/ 線上測試工具
(6)http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html python正規表達式
(7)https://c.runoob.com/front-end/854 測試工具推薦
這種線上測試工具随便一搜就有很多,這裡隻列舉幾個。
1、正規表達式學習引導
(1)字元串:"one1two2three3four4" 用正則處理,輸出 "1234"
首先分析字元串的規律,我們發現整個字元串由字母和數字組成,而結果僅包含數字,我們則可以寫成
\d{1}或者[1-9]{1}或者[1-9]都可以實作。
(2)字元串info = '<a href="
正規表達式為:[a-z.]*baidu[.a-z]* 和[w.]*baidu\.*\w*'
比對結果:
www.baidu.com
baidu
(3)比對出下面字元串的所有IP位址
17-03-29來自位址:美國/加拿大 CZ88.NET IP【199.30.25.74】 的使用者 查詢了 IP【222.45.52.0】位址:江蘇省鹽城市 鐵通ADSL
17-03-29來自位址:美國 加利福尼亞州瑪瑞娜戴爾瑞市IANA IP【106.39.201.242】 的使用者 查詢了 IP【210.39.72.0】位址:廣東省 深圳清華大學研究院
17-03-29來自位址:美國 CZ88.NET IP【171.106.42.113】 的使用者 查詢了 IP【106.0.0.0】位址:美國 加利福尼亞州瑪瑞娜戴爾瑞市IANA
17-03-29來自位址:亞太地區 CZ88.NET IP【183.202.167.74】 的使用者 查詢了 IP【202.207.224.0】位址:山西省長治市 長治醫學院
17-03-29來自位址:中國 移動 IP【111.37.0.222】 的使用者 查詢了 IP【210.44.128.0】位址:山東省濟南市 山東财政學院
17-03-29來自位址:中國 CZ88.NET IP【180.153.214.182】 的使用者 查詢了 IP【123.6.0.0】位址:河南省鄭州市 聯通
17-03-29來自位址:CZ88.NET IP【 115.63.65.233】 的使用者 查詢了 IP【221.176.200.0】位址:河南省 移動
17-03-29來自位址:美國 CZ88.NET IP【157.55.39.166】 的使用者 查詢了 IP【217.10.244.0】位址:歐洲 CZ88.NET
正規表達式:
(1)\d*\.\d*\.\d*\.\d* 自己寫的
(2)(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)
第二個是在上面的工具中找的 明顯比自己寫的專業全面
搜尋的結果:
199.30.25.74
222.45.52.0
106.39.201.242
210.39.72.0
171.106.42.113
106.0.0.0
183.202.167.74
202.207.224.0
111.37.0.222
210.44.128.0
180.153.214.182
123.6.0.0
115.63.65.233
221.176.200.0
157.55.39.166
217.10.244.0
經過上面的三個小測試,發現正規表達式确實是一個很好玩的東西,也确實也有一定的難度,實作的方法和文法有多種,但是新手難以保證你的防範就是最全面的最準确的,需要多加練習才能熟練掌握。
2、正規表達式基本文法介紹
說明 | 正規表達式 |
---|---|
網址(URL) | [a-zA-z]+://[^\s]* |
IP位址(IP Address) | ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) |
電子郵件(Email) | \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* |
QQ号碼 | [1-9]\d{4,} |
HTML标記(包含内容或自閉合) | <(.*)(.*)>.*<\/\1>|<(.*) \/> |
密碼(由數字/大寫字母/小寫字母/标點符号組成,四種都必有,8位以上) | (?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$ |
日期(年-月-日) | (\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9])) |
日期(月/日/年) | ((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2}) |
時間(小時:分鐘, 24小時制) | ((1|0?)[0-9]|2[0-3]):([0-5][0-9]) |
漢字(字元) | [\u4e00-\u9fa5] |
中文及全角标點符号(字元) | [\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee] |
中國大陸固定電話号碼 | (\d{4}-|\d{3}-)?(\d{8}|\d{7}) |
中國大陸手機号碼 | 1\d{10} |
中國大陸郵政編碼 | [1-9]\d{5} |
中國大陸×××号(15位或18位) | \d{15}(\d\d[0-9xX])? |
非負整數(正整數或零) | \d+ |
正整數 | [0-9]*[1-9][0-9]* |
負整數 | -[0-9]*[1-9][0-9]* |
整數 | -?\d+ |
小數 | (-?\d+)(\.\d+)? |
不包含abc的單詞 | \b((?!abc)\w)+\b |