PowerShell含括号/方括号的字符串匹配问题求解
问题修复方案
原代码的问题在于-match操作符的特性:它是基于正则表达式进行匹配的,而字符串中的()、[]属于正则的特殊语法字符(比如()用于分组,[]定义字符集),直接作为匹配模式会被解析成正则规则,而非字面量字符串,导致子串匹配逻辑失效。
修复方法一:使用原生子串包含检查(推荐)
直接调用.NET字符串的Contains()方法,它会纯粹检查目标字符串是否包含指定子串,无需处理特殊字符:
foreach($u in $playbackDevices){ if ($d.Name.Contains($u)){ $qualifiedPlaybackDeviceList.Add($d) } }
如果需要不区分大小写的匹配,可以改用IndexOf()方法:
foreach($u in $playbackDevices){ if ($d.Name.IndexOf($u, [StringComparison]::OrdinalIgnoreCase) -ge 0){ $qualifiedPlaybackDeviceList.Add($d) } }
修复方法二:转义正则特殊字符后使用-match
如果一定要保留-match,需要用[regex]::Escape()将$u中的正则特殊字符转义为字面量,确保匹配逻辑符合预期:
foreach($u in $playbackDevices){ $escapedPattern = [regex]::Escape($u) if ($d.Name -match $escapedPattern){ $qualifiedPlaybackDeviceList.Add($d) } }
内容的提问来源于stack exchange,提问作者Bo Visfeldt
相关产品推荐
相关产品推荐

