繁体   English   中英

正则表达式匹配 IP 范围?

[英]Regex to match an IP range?

有人可以帮助我使用正则表达式来匹配一系列 IP。 它应该匹配这样的东西:

"203.0.113.0-203.0.113.255"

我尝试了以下但只匹配单个 IP:

((?:\\d{1,3}\\.){3}\\d{1,3})(?:/((?:(?:\\d{1,3}\\.){3}\\d{1,3})|\\d{1,2}))?

您可以将String拆分为2个组件

String[] splitResult = ipRange.split("-");

然后对每个子字符串使用此模式

string pattern = @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"

由于每个IP部分最多只能达到255,因此您的模式实际上不起作用

如果你有匹配单个IP的正则表达式,那么只需添加-并重复你的正则表达式

String singleIPRegex = "yourRegex";
String rangeRegex = singleIPRegex + "-" + singleIPRegex;

if (someString.matches(rangeRegex)){
    //do your stuff
}

也可以作为singleIPRegex使用

(([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d{1,2}|2[0-4]\\d|25[0-5])

部分

([01]?\\d{1,2}|2[0-4]\\d|25[0-5])

将接受:

  • [01]?\\\\d{1,2} - >范围0-199,包括以0或00开头的数字,如01,001
  • 2[0-4]\\\\d - >范围200-249
  • 25[0-5] - >范围250-255

试试这个: ((?:\\d{1,3}\\.){3}\\d{1,3})(?:/((?:(?:\\d{1,3}\\.){3}\\d{1,3})|\\d{1,2})){2}

试试这个:

String data = "This http://example.com is a sentence 203.0.113.0-203.0.113.255 https://secure.whatever.org that contains 2 URLs.";


    Pattern pattern = Pattern.compile("\\s((\\d{1,4}\\.?){4}-(\\d{1,4}\\.?){4})\\s");
    Matcher matcher = pattern.matcher(data);

    while (matcher.find()) {
        System.out.println(matcher.group(1));
    }

希望这可以帮助。

您可以在此页面中为 IP 范围生成正则表达式https://www.analyticsmarket.com/freetools/ipregex/

对于您的情况,对于203.0.113.0 to 203.0.113.255范围内的 IP 地址,生成的正则表达式为^203\\.0\\.113\\.([1-9]?\\d|[12]\\d\\d)$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM