用于匹配日志文件中 IPv4 地址的正则表达式

问题描述 投票:0回答:2

我需要能够在日志文件中查找和替换 IP 地址等敏感数据,以便将它们发送给供应商以获得技术支持。

问题是日志文件还包含看起来像 ip 地址但有额外数字的版本号。

到目前为止我得到的正则表达式可以很好地获取 IP 地址:

(((25[0-5]){1,3}|(2[0-4]|(1\d|[1-9]|)\d)){1,3}\.?){4}

问题是它还会获取诸如版本号之类的东西,因此它也匹配诸如

1555.2655.3255.1594

之类的东西

我认为使用

{1,3}
会将其限制为最多 3 位数,但它不是那样工作的。

我正在使用 Powershell 来解析文件,下面是我正在处理的格式类型的模型:

test 127.1.1.1test test 10.0.0.1 test test 172.28.69.77test test 15.26.32.159 test test 15.26.32.1594test test 1.26.3255.1594test test 1555.2655.3255.1594test 255.255.255.192 256.255.255.0 999.999.999.999

regex powershell ip ip-address
2个回答
1
投票

如果 IP 可以与某些文本中的字母相邻,请使用负lookarounds设置边界。
例如。

(?<![\d.])
代表前面没有数字或点,在它之后
(?![\d.])
代表后面没有.

(?<![\d.])(?:(?:[1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:[1-9]?\d|1\d\d|2[0-4]\d|25[0-5])(?![\d.])

在 regex101 看到这个演示


如果 IP 由空格分隔,则模式可以缩短为:

(?<!\S)(?:(?:[1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.?\b){4}(?!\S)

regex101 的另一个演示

这里使模式更短的噱头是使用 optional

\.?
并在每次 \b 重复(甚至在最后)之后使用
word boundary
{4}
强制它。在第一种情况下,不能使用此方法,因为例如在
1.2.3.4abc
IP之后没有单词边界。


来自 IP 模式

(?:[1-9]?\d|1\d\d|2[0-4]\d|25[0-5])
的相关部分匹配 0-255 源自范围在线生成器正则表达式(有点缩短)。 Stack Overflow 也有一个


1
投票

这可能对你有用。

(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
© www.soinside.com 2019 - 2024. All rights reserved.