Regex匹配日志文件中的IPv4地址

yacmzcpb  于 2023-04-22  发布在  其他
关注(0)|答案(2)|浏览(178)

我需要能够找到并替换日志文件中的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

sg2wtvxw

sg2wtvxw1#

如果在某些文本中,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.])

See this demo at regex101
如果IP之间用空格**分隔,则模式可以缩短为:

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

Another demo at regex101
这里使模式更短的方法是使用 * 可选 * 点\.?,并通过在每次{4}重复之后使用word boundary\b来强制它(即使在最后)。在第一种情况下,这种技术不能使用,因为例如在1.2.3.4abc中,IP之后没有单词边界。
匹配0-255的IP模式(?:[1-9]?\d|1\d\d|2[0-4]\d|25[0-5])的相关部分来自regex for range online generator(略短)。还有一个at Stack Overflow

u1ehiz5o

u1ehiz5o2#

这可能对你有用。

(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})

相关问题