powershell 中的正则表达式前瞻

Regex lookahead in powershell

我正在尝试从遗留服务器的路由打印文件转储中提取信息并使用正则表达式对其进行解析。作为其中的一部分,我试图只提取 IPv4 路由信息。该文件看起来像这样...

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.0.24     20
===========================================================================
Persistent Routes:
  None

IPv6 Route Table
===========================================================================
Active Routes:
 If Metric Network Destination      Gateway
  1    306 ::1/128                  On-link
===========================================================================
Persistent Routes:
  None

我正在尝试使用 lookbehind/lookahead 方法 (?<=ce Metric)(?s)(.*)(?=={75}) 来获取 IPv4 路由。

          0.0.0.0          0.0.0.0      192.168.1.1     192.168.0.24     20

我遇到的问题是前瞻 (?=={75}) 正在捕获 75 个等号的最后一个实例,而不是找到后向后的下一个实例。

使您的捕获组惰性化 (?),这样它将匹配尽可能少的字符(在 ={75} 的第一个匹配处停止)

(?<=ce  Metric)(?s)(.*?)(?=={75})

Sample Regex101

恕我直言,使用多行单行正则表达式会容易得多:

$regex = 
@'
(?ms)IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
(.+?)
===========================================================================
'@

(Get-Content route_print.txt -Raw) -match $regex > $null
$Matches[1]