IP地址 正則表達式

IP地址的長度為32位,分為4端,每段8位,用十進制數字表示,每段數字范圍為0~255,段與段之間用英文句點"."隔開。
分析IP地址的組成特點:250-255、200-249、0-199.
這三種情況可以分開考慮:

  • 250-255:三位數,百位是2,十位是5,個位是0~5,用正則表達式可以寫成:25[0-5]
  • 200-249:三位數,百位是2,十位是04,個位是09,用正則表達式可以寫成:2[0-4]\d
  • 0-199:這個可以繼續分拆,如下:
    • 0-9:一位數,個位是0~9,用正則表達式可以寫成:\d
    • 10-99:二位數,十位是19,個位是09,用正則表達式可以寫成:[1-9]\d
    • 100-199:三位數,百位是1,十位是09,個位是09,用正則表達式可以寫成:1\d{2}

于是0-99的正則表達式可以合寫為[0-9]?\d,那么0-199用正則表達式就可以寫成(1\d{2})|([1-9]?\d),這樣0~255的正則表達式就可以寫成(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))
最后,前面3段加上句點"."可以使用{3}重復得到,第4段再來一次同樣的匹配,得到IP地址的正則表達式:
((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))).){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))

代碼

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        
        Scanner in = new Scanner(System.in);
        String ip = in.nextLine();
        String pattern = "((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))";
        if(ip.matches(pattern))
            System.out.println(true);
        else
            System.out.println(false);
    }
}

總結

IPv4地址正則表達式:
^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
IPv6地址正則表達式:
^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 出處:http://www.cnblogs.com/txw1958/archive/2011/10/13/ip_a...
    wuwind閱讀 6,658評論 1 1
  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,059評論 0 20
  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位,可能是字母,數字,標點符號,空格,換行符,漢字等...
    獅子挽歌閱讀 2,169評論 0 9
  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:選D,7+9=16;9+(-1)=8;(...
    Alex_bingo閱讀 19,101評論 1 19
  • 注:本篇文章只為方便查看,特此保留,如有冒犯,敬請諒解!!! 本文目標 30分鐘內讓你明白正則表達式是什么,并對它...
    阿杰Alex閱讀 1,504評論 0 10