正則匹配IP

2021-09-08 17:27:46 字數 1265 閱讀 2298

分析

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 是否合法。二 匹配...