正則表達(dá)式IP地址合法性判斷實戰(zhàn)記錄
一、正則表達(dá)式常見匹配字符快速回顧
| 符號 | 描述 | 
|---|---|
| . | 匹配處換行符\n之外任意1個字符 | 
| [] | 匹配[]中任意一個 | 
| \d | 一個0-9數(shù)字 | 
| \D | 匹配非數(shù)字 | 
| \w | 匹配單詞字符:a-z、A-Z、0-9 | 
| \W | 匹配非單詞字符 | 
| \s | 匹配空格、tab健 | 
| \S | 匹配非空格,tab健 | 
常用的匹配規(guī)則-匹配字符數(shù)量
匹配前一個字符出現(xiàn)0次或者無數(shù)次
匹配前一個字符出現(xiàn)1次或者無數(shù)次
| 符號 | 描述 | 
|---|---|
| ? | 匹配前一個字符出現(xiàn)0次或者1次 | 
| {m} | 匹配前一個字符出現(xiàn)m次 | 
| {m,} | 匹配前一個字符出現(xiàn)至少m次 | 
| {n,m} | 匹配前一個字符出現(xiàn)n-m次 | 
| ^ | 匹配字符串開頭 | 
| $ | 匹配字符串結(jié)尾 | 
| | | 或 | 
| (ab) | 將括號中字符作為一個分組 | 
二、 實戰(zhàn):正則表達(dá)式判斷IPv4地址合法性
python正則表達(dá)式處理re.match()函數(shù),可以對字符進(jìn)行匹配,查找的位置是從指定的位置開始一直往后找,返回第一個符合規(guī)則的對象,如果開始位置不符合匹配隊形則返回None。而如果從起始位置開始沒有匹配成功,即便其他部分包含需要匹配的內(nèi)容,re.match()也會返回None。
忘記的同學(xué)可以去看上篇文章講解
問題:假設(shè)有一個IP地址,如ip = ‘10.10.10.10’,如何檢測IPV4的IP地址格式是否正確?
分析
IPV4地址分四段,分別為:(1-255).(0-255).(0-255).(0-255)
第一段分析,有以下5種情況:
1-9 1位數(shù),由于是第一段,因此不能取0,1-9任意取 10-99 1開頭兩位數(shù),個位數(shù)0-9任意取 100-199 1開頭三位數(shù),十位數(shù)和個位數(shù)0-9任意取 200-249 2開頭三位數(shù),當(dāng)十位數(shù)為0-4時(即250以內(nèi)),個位數(shù)0-9任意取 250-255 2開頭三位數(shù),當(dāng)十位數(shù)為5時(大于等于250),個位數(shù)只能取0-5 這五種情況對應(yīng)的正則如下:
1-9 [1-9] 10-99 [1-9]\d 100-199 1\d\d 200-249 2[0-4]\d 250-255 25[0-5] 組合起來就是:
[1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
加個小括號組合起來:
([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])
后三段情況均一樣,有以下5中情況:
0-9 1位數(shù),0-9任意取,唯一與第一段有區(qū)別的地方 10-99 1開頭兩位數(shù),個位數(shù)0-9任意取 100-199 1開頭三位數(shù),十位數(shù)和個位數(shù)0-9任意取 200-249 2開頭三位數(shù),當(dāng)十位數(shù)為0-4時(即250以內(nèi)),個位數(shù)0-9任意取 250-255 2開頭三位數(shù),當(dāng)十位數(shù)為5時(大于等于250),個位數(shù)只能取0-5 這五種情況對應(yīng)的正則如下:
0-9 \d 10-99 [1-9]\d 100-199 1\d\d 200-249 2[0-4]\d 250-255 25[0-5] 組合起來就是
\d|\[1-9]\d|1\d\d|2[0-4]\d|25[0-5]
第四段最后需要加上結(jié)尾符號:$。表示終止匹配。
最終結(jié)果:
import re ip1 = '100.10.10.253' print(re.match(r'([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$',ip1)) *******************print********************************* <re.Match object; span=(0, 13), match='100.10.10.253'> ip2 = '0.10.10.253' print(re.match(r'([1-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]).(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$',ip2)) *******************print********************************* None
總結(jié)
到此這篇關(guān)于正則表達(dá)式IP地址合法性判斷的文章就介紹到這了,更多相關(guān)正則表達(dá)式IP地址合法性判斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
 Android中手機(jī)號、車牌號正則表達(dá)式大全
這篇文章主要介紹了Android中手機(jī)號、車牌號正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下2015-09-09

