寫出ip位址的正規表示式的思路

2021-06-19 19:14:13 字數 1443 閱讀 1465

首先,我們先分析一下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 ...