我想在文件中找到所有IP地址。问题是我需要排除127.0.0.1地址。我在linux bash中使用grep。 这是我已经拥有的:
[0-9]+.\.[0-9]+\.[0-9]+\.[0-9]+
答案 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]?)$
我已将量词更改为{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://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正则表达式匹配。