首页 > 解决方案 > 正则表达式在脚本中运行时不匹配,但在控制台中运行时匹配?

问题描述

我有以下代码,用于查看某些值是否与正则表达式匹配

$ValueRegex = [PSCustomObject]@{
    "year" = "^(201[0-9]|2020)$"
    "color" = "^#(?:[0-9a-fA-F]{6})$"
    "ID" = "^\d{9}$"
}
<#
    $SplitUp looks like this, each row is an object:
    year:2019
    ID:599245247
    color:#ffffff
#>
foreach ($b in $SplitUp) {
    $x = $b -split ":"
    $CompareVal = $ValueRegex | Select-Object -ExpandProperty $x[0]
    if ($CompareVal) {
        $Compare = $x[1]
        if ($Compare -match $CompareVal) { 
            $MatchCount++
        } else { 
            #Print Debug Info
            "'{0}' -match '{1}'" -f $Compare, $CompareVal
            $x
            pause
        }
    }
}

发生的奇怪的事情是,有时它不匹配,即使它应该匹配。如您所见,当某些内容不匹配时,我会打印调试信息,我会在其中输出相互比较的确切信息等。一个输出如下所示:

'2019' -match '^(201[0-9]|2020)$'
year
2019

问题是 - 它应该匹配。如果我'2019' -match '^(201[0-9]|2020)$'在新的 PowerShell 控制台窗口中运行它,它会显示它是True. 在我的脚本中,它说它是False.

怎么了?我在 Visual Studio Code 和 PowerShell ISE 中尝试过,结果相同

标签: powershell

解决方案


推荐阅读