PowerShell Lookbehind 的 RegeX 代码在 IP 寻址上不匹配

Posted

技术标签:

【中文标题】PowerShell Lookbehind 的 RegeX 代码在 IP 寻址上不匹配【英文标题】:RegeX code for PowerShell Lookbehind not working matching on IP Addressing 【发布时间】:2019-04-25 11:44:02 【问题描述】:

我正在尝试使用 PowerShell 解析一些 IP 地址的日志文件,但在这些文件中我也有一些误报,它们实际上是版本号。可能还有更多,但作为第一次开始,我想获取所有前面没有 Version= 的 IP。

我尝试了我的 Regex 的许多不同变体,但没有真正成功,并且在 regex101.com 中四处乱窜也没有给我带来任何成果。

(?<!Version=)(?<Address>((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]?))

理想情况下应该是这样的:

不匹配版本=10.0.0.1

匹配 10.0.0.1

匹配 IPAddress=10.0.0.1 匹配IP=10.0.0.1

等等

【问题讨论】:

请编辑问题并添加一些应该匹配和不应该匹配的数据样本。同时,删除所有powershell-version 标签,因为当问题与特定版本有关时应该使用这些标签。 【参考方案1】:

添加单词边界 (\b):

(?<!Version=)\b(?<Address> ... )\b

这可以防止匹配开始于 IP 地址,否则会发生这种情况。如果没有单词边界,方括号中的区域将匹配:Version=1[0.0.0.1]

【讨论】:

以上是关于PowerShell Lookbehind 的 RegeX 代码在 IP 寻址上不匹配的主要内容,如果未能解决你的问题,请参考以下文章

将lookbehind模式与匹配的正则表达式搜索模式分组以作为整体替换

没有LookBehind功能的正则表达式

正则表达式的可变长度lookbehind-assertion替代方案

非固定长度的lookbehind解决方法

ES2018 新特征之:正则表达式反向(lookbehind)断言

带有“非字符”的 Lookbehind 忽略位置 0 的匹配