PowerShell如何判断字符串是否作为子串存在于数组中
问题根因及修复方案
代码存在两处核心错误:
-match运算符使用顺序错误
PowerShell中-match的语法为待检测字符串 -match 正则规则,你需要判断数组元素是否包含$val2作为子串,应该将数组元素放在运算符左侧,匹配规则放在右侧,原代码写反了匹配顺序,自然无法得到正确结果。- 未处理正则特殊字符转义
你用到的匹配规则$val2包含反斜杠\,该字符在正则表达式中属于转义标记,不会被识别为普通字面量字符,直接传入-match会导致匹配规则失效。
修复方案
如果仅需要做普通字面量子串匹配,优先使用-like通配符匹配,无需处理转义逻辑,写法更直观:
管道写法修正
$val1 = "folder1\folder2\folder3" $val2 = "folder1\folder2" $val3 = "folder9" $val_array = @($val1, $val3) $null -ne ($val_array | Where-Object { $_ -like "*$val2*" }) # 正确返回$true
遍历写法修正
foreach ($item in $val_array) { if ($item -like "*$val2*") { Write-Host "yes" } }
如果需要使用正则匹配的高级能力,需要先对匹配规则做转义处理:
$escapedRule = [regex]::Escape($val2) # 管道写法 $null -ne ($val_array | Where-Object { $_ -match $escapedRule }) # 遍历写法 foreach ($item in $val_array) { if ($item -match $escapedRule) { Write-Host "yes" } }
内容的提问来源于stack exchange,提问作者amaru96
相关产品推荐
相关产品推荐

