bash中的IPv4正则表达式

时间:2014-01-16 19:48:56

标签: regex bash

有没有人对我的IPv4正则表达式有任何建议。这并不能完全验证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也验证了:(

感谢输入

*更新*

基于DopeGhoti的输入,到目前为止这里是我的地方。我遇到了将此问题添加到我的更大正则表达式中的问题。我将此正则表达式设置为等于变量,然后将其与另一个表达式组合用于IPv6。我在正则表达式中添加了一些内容。例如a(| insert DopeGhoti regex here)。这允许我也接受一个空的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正则表达式。新正则表达式中的某些东西正在破坏它。

*更新*

好奇怪。我在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]?)))\|$

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

3 个答案:

答案 0 :(得分:1)

你有没有试过逃脱点char?

 # ^([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} 
 )

答案 1 :(得分: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]?))

答案 2 :(得分:0)

更新后:

如果合并的正则表达式在单独工作时失败,您可以尝试提取两个表达式中的每一个,然后测试:

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