分析
ip位址的長度為32位,分為4段,每段8位,用十進位制數字表示,每段數字範圍為0~255( 2^8 ),段與段之間用英文句點「.」隔開。例如:某台計算機ip位址為10.11.44.100。
ip位址的組成特點:250-255、200-249、0-199。
分別考慮
這三種情況可以分開考慮,
1. 250-255:特點:三位數,百位是2,十位是5,個位是0~5,用正規表示式可以寫成:25[0-5]
2. 200-249:特點:三位數,百位是2,十位是0~4,個位是0~9,用正規表示式可以寫成:2[0-4]\d
3. 0-199:這個可以繼續分拆,這樣寫起來更加簡單明瞭.
0-9: 特點:一位數,個位是0~9,用正規表示式可以寫成:\d
10-99: 特點:二位數,十位是1~9,個位是0~9,用正規表示式可以寫成:[1-9]\d
100-199:特點:三位數,百位是1,十位是0~9,個位是0~9,用正規表示式可以寫成:1\d
再組合
於是0-99的正規表示式可以合寫為[1-9]?\d
那麼0-199用正規表示式就可以寫成(1\d)|([1-9]?\d)
這樣0~255的正規表示式就可以寫成(25[0-5]|2[0-4]\d|((1\d)|([1-9]?\d)))
最後,前面3段加上句點.可以使用重複得到,第4段再來一次同樣的匹配,得到ip位址的正規表示式:
((?:(?:25[0-5]|2[0-4]\d|((1\d)|([1-9]?\d)))\.)(?:25[0-5]|2[0-4]\d|((1\d)|([1-9]?\d))))
注意:
1. 為什麼三位數的匹配放在二位數/一位數的前面?
因為正規表示式規則之一:最先開始的匹配擁有最高的優先權。
2. 0.0.0.0和255.255.255.255是合法存在的ip位址,你知道是為什麼嗎?
注意這兩個ip位址也可以匹配,要單獨過濾。
4. 為什麼前面在最前面要有?:呢?它在這裡有什麼用?
?:是不捕獲分組的意思,就是()中的內容本來可以在後邊用\1,\2等代替,現在不能了。同時在匹配出的完整**中也不包含分組。( 詳細看?<:哪一篇的解釋 )
正則匹配IP
分析 ip位址的長度為32位,分為4段,每段8位,用十進位制數字表示,每段數字範圍為0 255 2 8 段與段之間用英文句點 隔開。例如 某台計算機ip位址為10.11.44.100。ip位址的組成特點 250 255 200 249 0 199。分別考慮 這三種情況可以分開考慮,1.250 255...
python正則匹配ip位址
用正則匹配ip位址 可以將ip位址按區間分類 0 99 1 9 d 表示十位數有1個或無 100 199 1 d 200 249 2 0 5 d 250 255 25 0 5 前面三位ip都帶.讓他們擴張三次。最後一位ip不帶.再來一次 import re g se215.255.255.155 5...
C語言正則匹配IP例項詳解
在實際開發中,作一些字串的匹配時,使用正規表示式來過濾匹配,更加簡潔 匹配更加精準。為此,想到引入乙個問題來總結記錄一下 linux c 中正規表示式的使用方法。一 問題描述 要求使用者輸入一串類似ip位址的字串,該程式通過呼叫c庫提供的正規表示式介面來實現判斷使用者輸入的 ip 是否合法。二 匹配...