首先,我們先分析一下ip位址的一些基本情況,如下
1、1到3位
2、有三位時,百位最大為2
3、百位最大為2時,十位最大為5
4、百位最大為2時,十位最大為5時,個位最大為5
5、前三個數後有一點.
先寫出滿足這樣的乙個數
一位 [1-9]
二位 [1-9]\d
三位1開頭 1\d
三位2開頭第二位不是5 2[0-4]\d
三位2開頭第二位是5 25[0-5]
用了、\d、{}三種符號
很明顯,以上都是或的關係
接著,我們將他組合起來,那麼滿足ip要求的乙個數就是
[1-9]|([1-9]\d)|(1\d)|(2[0-4]\d)|(25[0-5])
這裡引入了|、()兩個符號
前3個還有一點
(([1-9]|([1-9]\d)|(1\d)|(2[0-4]\d)|(25[0-5]))\.)
這\.是乙個轉義,代表了字元.
在加上最有乙個數就是
(([1-9]|([1-9]\d)|(1\d)|(2[0-4]\d)|(25[0-5]))\.)([1-9]|([1-9]\d)|(1\d)|(2[0-4]\d)|(25[0-5]))
寫出以上正則後,測試了一下
發現對於111.111.111.111匹配出來是111.111.111.1
於是我們將位數多匹配放到前面去,讓他先找位數多的匹配,於是變成如下
(((25[0-5])|(2[0-4]\d)|(1\d)|([1-9]\d)|[1-9])\.)((25[0-5])|(2[0-4]\d)|(1\d)|([1-9]\d)|[1-9])
再測一下,發現1131.111.111.111也能匹配為131.111.111.111,於是我們我們需要給他規定一下單詞邊界,查一查正則的文件,用\b可以辦到,變成如下
(((\b2[0-4]\d\b)|(\b25[0-5]\b)|(\b1\d\b)|(\b[1-9]\d\b)|\b[1-9])\b\.)(\b(2[0-4]\d\b)|(\b25[0-5]\b)|(\b1\d\b)|(\b[1-9]\d\b)|\b[1-9]\b)
這樣就沒有什麼問題了
就這樣了,寫正則思路最重要,合理的進**形分解,不斷完善
以上實際已經能滿足我的需求了,更嚴格一點,111.11.111.111.,在最後帶一點的字串也能匹配出來,我們不想他匹配,因此要對文字邊界做限制,檢視文件,$可以辦到
於是在最後加上$即可
(((\b2[0-4]\d\b)|(\b25[0-5]\b)|(\b1\d\b)|(\b[1-9]\d\b)|\b[1-9])\b\.)(\b(2[0-4]\d\b)|(\b25[0-5]\b)|(\b1\d\b)|(\b[1-9]\d\b)|\b[1-9]\b)$
同理。.11.111.111.11
這樣前面有邊界符的還能匹配,這個我們該怎麼改呢 :-)
IP位址的正規表示式
分析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...
IP位址的正規表示式
ip位址的長度為32位,分為4段,每段8位,用十進位制數字表示,每段數字範圍為0 255,段與段之間用英文句點 隔開。例如 某台計算機ip位址為10.11.44.100。分析ip位址的組成特點 250 255 200 249 0 199。這三種情況可以分開考慮,1.250 255 特點 三位數,百位...
IP位址的正規表示式
這裡講的是ipv4的位址格式,總長度 32位 4段 8位,每段之間用.分割,每段都是0 255之間的十進位制數值。將0 255用正規表示式表示,可以分成以下幾塊來分別考慮 取值區間 特點正則寫法 可合併的寫法 可合併的寫法 可合併的寫法 0 9一位數,只有個位,取值是0 9 d 1 9 d 1 d ...