我是一个正则表达式的菜鸟,对于我的生活,我无法弄清楚如何匹配包含三个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},它会中断。我认为它与地址之间的空格有关,但我无法弄清楚如何处理它。我需要捕获第三个地址。
答案 0 :(得分:2)
您只需要在代码中添加多行修改器即可。
您的新代码应该是这样的
/([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/g
答案 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
匹配2
匹配3
你可以在这里测试一下:
问题可能在于您尝试访问它们的方式。
在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}。使用非匹配组和计数的实例