【问题标题】:How to check if the array matches with specific string part in PowerShell?如何检查数组是否与 PowerShell 中的特定字符串部分匹配?
【发布时间】:2016-02-09 15:16:30
【问题描述】:

我是 PowerShell 脚本的新手,正在研究 POC。我被卡住了,无法继续进行,所以我在这个网站上发布我的问题以获得一些想法/答案。

任务是将一组值与正则表达式进行比较。但是我没有得到想要的输出。这是我写到现在的代码:

 $array = @('MBS\FY16\11 May\Sirius Agreements\04 Build','MBS\FY16\11 May\Sirius Agreements\05 Build')
$values = 'MBS\FY16\11 May|MBS\FY16\12 Jan'
$Splitvalues = $values.Split('|')
[regex]$Regex = ‘(?i)^(‘ + (($Splitvalues | % {[regex]::escape($_)}) –join “|”) + ‘)$’

 if($array -match $Regex)
 {
    echo "Matched"
 }
 else
 {
    echo "notmatched"
 }`

要求是与 $Values 中的任何一个匹配。所以我用管道分割它们,然后用两个数组值创建一个正则表达式。

当我与 $array 的实际值数组进行比较时,它失败了。它总是指向else 部分。

我在想,当我们使用正则表达式进行匹配时,如果确切的单词与源值匹配,它将返回 true。或者也许我使用了错误的正则表达式。

我只需要匹配“MBS\FY16\11 May”或“MBS\FY16\12 June”的确切部分值并返回匹配的值或留言。

我该如何解决这个问题?

【问题讨论】:

    标签: regex powershell powershell-3.0 powershell-4.0


    【解决方案1】:

    您无需创建新的[regex] 对象即可使用-match 运算符:

    $ValuesToFind = 'MBS\FY16\11 May','MBS\FY16\12 Jan'
    $MatchPattern = ($ValuesToFind |%{ [regex]::Escape($_) }) -join '|'
    

    现在,当您将-match 应用于数组时,将返回数组中的所有匹配项,这听起来像是您的问题的完美结果。

    因此,您可以将整个事情简化为:

    $Array        = 'MBS\FY16\11 May\Sirius Agreements\04 Build','MBS\FY16\11 May\Sirius Agreements\05 Build'
    $ValuesToFind = 'MBS\FY16\11 May','MBS\FY16\12 Jan'
    
    $MatchPattern = ($ValuesToFind |%{ [regex]::Escape($_) }) -join '|'
    
    $Array -match $MatchPattern
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      • 2017-09-26
      • 2010-12-08
      • 2020-02-06
      相关资源
      最近更新 更多