在多行中捕获的正则表达式可在regex101.com上运行,但不能在PowerShell中运行

这是我正在使用的正则表达式code (?m)^.*(10(?:\.\d+){3}\/\d+)\s.*\s(\d+).*$ 假定从该行捕获子网IP和后4位数字。一个例外是,如果只有子网IP直接跟在新行之后,则捕获应在下一行继续。

示例数据:

*> 10.118.130.98/32 172.17.128.161 0 65000 4809 23 8705 8705 8705 8705 i *> 10.118.130.102/32 172.17.128.161 0 65000 4809 23 285 i

捕获组1应该包含10.118.130.98/32和10.118.130.102/32,捕获组2应该包含8705和285。这在regex101.com上运行良好,但是在PowerShell中,它仅捕获第一行

在多行中捕获的正则表达式可在regex101.com上运行,但不能在PowerShell中运行

mydisable 回答:在多行中捕获的正则表达式可在regex101.com上运行,但不能在PowerShell中运行

我建议使用-Raw作为单个文本变量而不是逐行读取文件,然后使用正则表达式查找仅包含类似IP字符串以及端口号和换行符的行,然后删除这些位置的换行符:

(Get-Content $file -Raw) -replace '(?m)^(\d+(?:\.\d+){3}/\d+)[\r\n]+','$1' | Set-Content $file

模式详细信息

  • (?m)-MULTILINE修饰符选项
  • ^-一行的开头
  • (\d+(?:\.\d+){3}/\d+)-第1组:1+个数字,然后是3个重复的点和1+个数字,然后是/和1+个数字
  • [\r\n]+-1个或多个CR或LF符号。

$1是一个占位符,包含第1组的值。

本文链接:https://www.f2er.com/3012387.html

大家都在问