我想在一个文件中找到所有的 IP 地址。问题是我需要排除 127.0.0.1 地址。我在 linux bash 中使用 grep。这是我已经拥有的:
[0-9]+.\.[0-9]+\.[0-9]+\.[0-9]+
我想在一个文件中找到所有的 IP 地址。问题是我需要排除 127.0.0.1 地址。我在 linux bash 中使用 grep。这是我已经拥有的:
[0-9]+.\.[0-9]+\.[0-9]+\.[0-9]+
这将做:
^(?!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
(最终用 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://www.regular-expressions.info/examples.html的正则表达式减去关于非捕获组的部分。
在这里我只需要测试第一组数字不是127
((?!127)
)
这个正则表达式是完整的,它不会接受类似256.256.256.256
的东西,但它只适用于 IPv4。
实际上,所有子网 127.0.0.0/8 都是为环回保留的(因此,127.45.78.32 也是环回的地址)。因此,要通过正则表达式解决您的问题,首先需要检查输入字符串不匹配:
^127\.
然后检查它是否匹配正常的 IP 正则表达式。