PowerShell - 正则表达式将匹配结果放入变量中

时间:2014-12-16 16:24:09

标签: regex powershell

我是Regex的新手,所以不要评判,这是我的电子邮件正文:

INTERFACE ATM0/0/0 NOW MATCHES UD

Notification Type: INT-PHYSICAL

Host: Bla Bla 
Address: xxx.xx.xxx.xx
State: UP
Date/Time: Thu Dec 11 21:07:05 GMT 2014

...

我正在使用VBA宏将电子邮件导出为CSV文件,然后我将数据导入PowerShell并尝试将body与下面的RedEx代码匹配。我只需匹配此行 - INTERFACE ATM0/0/0 NOW MATCHES UD并将结果放入变量 - AlertName ,但问题是这条线对于每封电子邮件都不相同。此行的部分始终相同,为INTERFACE[space][space]NOW[space]MATCHES[space]

这是我到目前为止所得到的:

If($_ -match "(?<AlertName>[INTERFACE\s\w -/\sNOW\sMATCHES\s\w \r?\n]]+?)") 

If($_ -match "(?<AlertName>[INTERFACE\s.*\r?\n]+?)")  

但它不起作用!

你能帮我吗?

提前致谢!

2 个答案:

答案 0 :(得分:3)

不清楚你正在做什么,但是下面的内容将有助于

if($_ -match "(INTERFACE.*NOW\s+MATCHES.*)") {
  $alertName = $matches[1]
}

特殊变量$matches将包含有关匹配的信息,$matches[1]将包含第一组捕获 - 即括号(...)

之间匹配的内容

答案 1 :(得分:1)

PowerShell存储-match哈希表中$matches[]运算符的匹配项。

如果您需要更多功能,还可以直接使用.NET中的[Regex]类(aka,[System.Text.RegularExpressions.Regex])。