我在powershell脚本中使用if 。
if ($match.Groups.Count) {
while ($match.Success) {
Write-Host ("Match found: {0}" -f $match.Value)
$match = $match.NextMatch()
}
}
else {
Write-Host "Not Found"
}
在if端有效,但在else端,它不能返回“ Not Found”。它没有显示任何错误。
答案 0 :(得分:3)
PetSerAl像以前一样无数次地在评论中提供了关键的指针:
令人惊讶的是,静态[System.Text.RegularExpressions.Match]
方法(或其实例方法对应物)返回的[regex]::Match()
实例即使其匹配操作,其.Groups
属性中也包含1个元素没有成功 [1] ,因此,假设实例存储在$match
中, $match.Groups.Count
总是返回$true
。
相反,像在.Success
循环中所做的那样,使用while
属性来确定是否找到了匹配项:
if ($match.Success) {
while ($match.Success) {
"Match found: {0}" -f $match.Value
$match = $match.NextMatch()
}
} else {
"Not Found"
}
请注意,我删除了Write-Host
调用,因为Write-Host
is generally the wrong tool to use,除非意图是明确地将只写到显示,从而绕过PowerShell的输出流,从而具有将输出发送到其他命令,将其捕获到变量中或将其重定向到文件的能力。
[1] [regex]::Match('a', 'b').Groups.Count
返回1
,即使比赛显然没有成功。