正则表达式:我如何匹配第三个IPv4地址?

时间:2015-10-20 21:15:11

标签: regex

我是一个正则表达式的菜鸟,对于我的生活,我无法弄清楚如何匹配包含三个IPv4地址的第三个IPv4地址。

有问题的一行:

ip route 214.25.48.547 255.255.255.255 16.48.75.46 name Chicago-VPN

到目前为止我的正则表达式匹配一个IP:

([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})

如果我在它的末尾添加一个{3},它会中断。我认为它与地址之间的空格有关,但我无法弄清楚如何处理它。我需要捕获第三个地址。

https://regex101.com/r/mN3cR6/1

5 个答案:

答案 0 :(得分:2)

您只需要在代码中添加多行修改器即可。

您的新代码应该是这样的

/([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/g

请参阅此演示https://regex101.com/r/mN3cR6/2

答案 1 :(得分:0)

尝试

([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\s?)+

这应该匹配一个,两个或三个,甚至更多" IP"。

或者

([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\s([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\s([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})

正好为3。

或者

([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\s?){3}

有一个较短的公式,但有一些可能的错误。

请注意,基本想法也存在问题,因为它匹配" 999.999.999.999"当它绝对不是有效的IP地址时。

答案 2 :(得分:0)

问题是,正则表达式不仅需要包含IP,还需要包含IP之间的空格。

因此,在重复的组中添加空格应该可以解决问题:

([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ){3}

如果你不希望在最后一场比赛中占据空间,那么你可以使用??(或*?)使其变得非常贪婪:

([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ??){3}

另请注意,您的正则表达式不仅仅匹配有效的IP。例如999.999.999.999很适合。

答案 3 :(得分:0)

您已经将所有三个IP与该正则表达式进行匹配。

([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})

匹配1

  1. 214.25.48.547
  2. 匹配2

    1. 255.255.255.255
    2. 匹配3

      1. 16.48.75.46
      2. 你可以在这里测试一下:

        http://rubular.com/

        问题可能在于您尝试访问它们的方式。

        在Ruby中,你的正则表达式非常有效:

        regex = /([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/
        "ip route 214.25.48.547 255.255.255.255 16.48.75.46 name Chicago-VPN".scan(regex)
         => [["214.25.48.547"], ["255.255.255.255"], ["16.48.75.46"]]
        

答案 4 :(得分:0)

以下内容应与第三个ip匹配

(?:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\s){2}([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})

根据您使用的语言,可能会更加紧凑 - 例如在红宝石中

string.scan(/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/)[2] 

会给你你想要的东西。你也可以折叠倍数[0-9] {1,3}。使用非匹配组和计数的实例