PowerShell版本范围匹配问题:筛选仅含8.6.22的版本区间
解决方案
要准确筛选出两端均为8.6.22.*格式的版本范围条目,需要验证范围的起始和结束版本都符合要求,而不是仅检查字符串开头。原-like操作符的逻辑无法覆盖这种场景,建议使用正则表达式来精确匹配。
修改后的代码
# 定义匹配两端都是8.6.22.x格式的正则表达式 $versionPattern = '^8\.6\.22\.\d+-8\.6\.22\.\d+$' if (![string]::IsNullOrEmpty($versions)) { Write-Host "Versions range (Manifest):" foreach ($v in $versions) { if ($v -notmatch $versionPattern) { Write-Host $v -ForegroundColor Red } else { Write-Host $v } } Write-Host }
正则表达式说明
^:匹配字符串的起始位置,确保从开头就符合格式8\.6\.22\.\d+:匹配8.6.22.后接任意位数的数字(覆盖如8.6.22.0、8.6.22.0000这类带前导零的版本)-:匹配版本范围的分隔符$:匹配字符串的结束位置,确保整个范围的两端都符合要求
效果验证
运行修改后的代码后:
- 符合要求的条目(如
8.6.22.607-8.6.22.999、8.6.22.0000-8.6.22.9999)会正常输出 - 不符合的条目(如
8.6.22.0-8.6.24.999、8.6.20.0-8.6.22.999)会被标红显示
内容的提问来源于stack exchange,提问作者Bandit
相关产品推荐
相关产品推荐

