You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:09:03