需要Regex来捕获不包括环回的IP

时间:2013-08-05 14:13:53

标签: regex

我想在文件中找到所有IP地址。问题是我需要排除127.0.0.1地址。我在linux bash中使用grep。 这是我已经拥有的:

[0-9]+.\.[0-9]+\.[0-9]+\.[0-9]+

2 个答案:

答案 0 :(得分:4)

这样做:

^(?!127\.0{1,3}\.0{1,3}\.0{0,2}1$)((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]?)$

测试http://regexr.com/3g3ov

我已将量词更改为{1,3}

(?!127\.0{1,3}\.0{1,3}\.0{0,2}1$)表示您不得拥有127.0.0.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]?)用于最后一位数组。

我已将正则表达式锚定到字符串的开头^和结尾$

如果要排除所有环回(所以127.*.*.*

^(?!127)((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]?)$

测试http://regexr.com/3g3os

这两个正则表达式基于http://www.regular-expressions.info/examples.html的正则表达式减去非捕获组的部分。

在这里,我必须仅测试第一组数字不是127(?!127)

此正则表达式已完成,它不会接受256.256.256.256之类的内容,但它仅适用于IPv4。

答案 1 :(得分:1)

实际上,所有子网127.0.0.0/8都保留用于环回(因此,127.45.78.32也是环回的地址)。因此,要通过regexp解决您的问题,首先需要检查,输入字符串不匹配:

^127\.

然后检查它是否与正常的IP正则表达式匹配。