2015-01-07 25 views
0

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

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 

和我想要一个回顾后/超前方法(?<=ce Metric)(?s)(.*)(?=={75})获得IPv4路由出来,像这样。

  0.0.0.0   0.0.0.0  192.168.1.1  192.168.0.24  20 

我与我有什么遇到的问题是,回顾后发现后先行,(?=={75}),被捕获的75个等号,而不是下一个最后一个实例。

回答

1

让你捕获组懒惰(?),以便尽可能地(停在={75}第一场比赛),它会尽可能少的字符匹配

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

Sample Regex101

+0

当,一个字符关闭。这是完美的。谢谢! –

1

恕我直言,这将是一个容易得多用多行的单行正则表达式:

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

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

这是“更干净,但答案中的解决方案也是懒惰的操作员:) –

+0

同意这只是一个不同的方法来解决问题,但它很容易编写代码(大部分工作是从匹配中复制/粘贴完成的数据),并且稍后阅读更直观。 – mjolinor