【问题标题】:Regex get matches for ranges in IPv4 addresses with octet notation正则表达式使用八位字节表示法获取 IPv4 地址范围的匹配项
【发布时间】:2019-05-12 13:26:34
【问题描述】:

我想使用正则表达式来获取提供的 IP 地址中的所有范围。

例子:

192.168.0-255.1 将返回 0-255

192.168.0-255.1-10 将返回 0-255 和 1-10

192.168.0-10,42,80-200.1-10,128-255 将返回 0-10、80-200、1-10、128-255。

奖励:我还希望能够将这些表达式分成 4 个不同的表达式,以确定 IP 范围在哪个八位字节中。 示例:192.168-180.0.1 我想从一个表达式中获取 168-180,该表达式查找子字符串左侧只有一个句点和子字符串右侧某处的两个句点的匹配项。

【问题讨论】:

    标签: regex ip-address


    【解决方案1】:

    这样的?

    <?php
    $input = <<<INPUT
    192.168.0-255.1
    192.168.0-255.1-10
    192.168.0-10,42,80-200.1-10,128-255
    INPUT;
    
    preg_match_all("/[0-9]+\-[0-9]+/m", $input, $m);
    
    print_r($m);
    

    输出:

    Array
    (
        [0] => Array
            (
                [0] => 0-255
                [1] => 0-255
                [2] => 1-10
                [3] => 0-10
                [4] => 80-200
                [5] => 1-10
                [6] => 128-255
            )
    
    )
    

    [0-9]+ 1 个或多个数字 -“-”转义 [0-9]+ 1个或多个数字

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多