【发布时间】:2018-11-22 18:23:24
【问题描述】:
假设我有一个可能包含一个或多个 IP 地址的字符串。如何在 ruby 中使用正则表达式匹配所有这些并且只匹配有效的?
目前,我的解决方案如下所示:
IP_ADDR_REGEX = %r{
\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
}x
这在 IP 用空格分隔时效果很好,例如它从文本 bla bla 192.168.1.1 bla 中提取 192.168.1.1。但是,在这种情况下,它仍会提取 192.168.1.1:bla bla 192.168.1.1.1.1 bla。
如何使它不匹配这种情况?即当它是 192.168.1.1.1.1 时,我的正则表达式不应该返回匹配项。我已经寻找了很多关于这个问题的解决方案,但找不到我想要的。我还尝试通过最后仅匹配空格来自己找出解决方案(因为\b 也匹配. 字符)但我无法使其工作。
谢谢
【问题讨论】:
-
只是 IPv4 地址?
-
请注意
[a:b:c::d:e:f]也是一个有效的IP地址,例如[::]。