我在PowerShell的条件语句中遇到-match
功能的问题。
说我有3个文件:
Test.dll(此dll中包含[TestClass]
个字词)
测试1。 dll(此dll的TestClass
没有括号)
的Test2。 dll(这个dll根本没有它)
我正在搜索只有[TestClass]
如果我使用以下代码,Test.dll和Test1.dll都在这种情况下工作:(顺便说一下,每个$_
都是一个dll)
if ([IO.File]::ReadAllText($_) -match "TestClass")
{
$ProjectTestContainers += $_
Write-Host $ProjectTestContainers
}
它应该,但那不是我想要的。我只想要包含[TestClass]
的文件所以我试过这个
if ([IO.File]::ReadAllText($_) -match "`[TestClass`]")
{
$ProjectTestContainers += $_
Write-Host $ProjectTestContainers
}
这适用于所有条件,Test.dll,Test1.dll和Test2.dll,它不应该。它应该只给我Test.dll,因为它是唯一包含[TestClass]
有什么想法吗?如果你需要我更多,请告诉我。
答案 0 :(得分:2)
-match
运算符正在对您的' TestClass'进行正则表达式比较。 string,因此反引号(`)字符不是正则表达式模式的正确转义字符。您认为括号字符需要转义是正确的,因为它们是正则表达式模式中的特殊字符。因为我们正在处理正则表达式,所以正确的转义字符是' \&#39 ;;试试这个:
if ([IO.File]::ReadAllText($_) -match "\[TestClass\]")
答案 1 :(得分:2)
您也可以使用此变体..更通用:
$m = '[TestClass]'
if ([IO.File]::ReadAllText($_) -match [regex]::escape($m))