2014-01-16 62 views
0

有没有人对我的IPv4正则表达式有任何建议。这并未完全验证IPv4地址。bash中的IPv4正则表达式

IPV4="^(|[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})\|" 

1.1.1.1是好的,但也999.1.1.1验证:(

感谢输入

* UPDATE *

基于DopeGhoti的输入,这里是哪里im到目前为止我遇到的问题添加到我的更大的正则表达式中我将这个正则表达式设置为一个变量,然后将它与另一个表达式结合起来用于IPv6,还有一些我添加到正则表达式。例如a(|在此插入DopeGhoti正则表达式)。这允许我也接受一个空的IPv4地址。我还加了一个\ |最后,因为这两个地址被一个大正则表达式检查是|分隔。

IPV4="^(|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))\|" 
REGEX="$IPV4$IPV6" 

这个过程适用于我简单的IPv4正则表达式。新正则表达式中的某些东西正在破坏它。

* UPDATE *

好奇怪的。我测试了rubular如下:

http://rubular.com/r/c6J3sESDyN

^(|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))\|$ 

这似乎是工作。也许我有另一个内部问题。现在检查。

+1

250.1.1.1是一个有效的IP地址。 – DopeGhoti

+0

对不起,输入错误的例子。 – Atomiklan

回答

1

您是否尝试过点点字符?

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

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

这也是999.999.999.999 – DopeGhoti

+0

这是真的,但它的OP的正则表达式,把它与他,只是显示点需要逃避,因此它不匹配999999999999 – sln

0

您可以试试(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))

+0

这是非常非常接近。 – Atomiklan

+0

我编辑了这个文件,并对几个好的和不好的“地址”进行了测试,这似乎非常符合预期的工作。例如,它仍然会匹配“0.1.2.3”。 – DopeGhoti

+0

不幸的是255.255.255.257仍然有效。 – Atomiklan

0

更新后:

如果合并后的正则表达式是失败,无论是独立工作的,你可以尝试蒸馏每两个表达式,然后用测试:

egrep "(${IP4PATTERN}|${IP6PATTERN})" /path/to/file