4

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

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

2 回答 2

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(最终用 some 填充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。

于 2013-08-05T14:19:28.257 回答
1

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

^127\.

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

于 2013-08-05T14:18:51.443 回答