我正在尝试解析字符串:
helo identity email@test.com Pass (v=spf1)
使用-match
如下:
$line -match "helo identity (?<sender>.*) (?<heloresult>.*) (v=spf1)"
我认为这会回来:
$matches['sender'] = "email@test.com"
$matches['heloresult'] = "Pass"
但是,它会返回$false
。
值得注意的是,以下内容符合预期:
$line -match "helo identity (?<sender>.*) Pass"
PS C:\> $matches
Name Value
---- -----
sender email@test.com
0 helo identity email@test.com Pass
我错误地分配这两部分是什么意思?
答案 0 :(得分:3)
绕过最后一个v = spf1部分的捕获括号,使它们成为字面括号。使用反斜杠逃脱,正则表达式转义字符。
PS C:\temp> 'helo identity email@test.com Pass (v=spf1)' -match 'helo identity (?<Sender>.*) (?<HeloResult>.*) \(v=spf1\)'
True
PS C:\temp> $Matches.Values
email@test.com
Pass
helo identity email@test.com Pass (v=spf1)
答案 1 :(得分:2)
将我的评论转换为requested的答案:
(
和)
是powershell正则表达式中的特殊字符。必须使用反斜杠转义字面括号。您的案例中正确的RegEx将是:
helo identity (?<sender>.*) (?<heloresult>.*) \(v=spf1\)