我是PowerShell脚本编写的新手,正在开发POC。我卡住了,无法继续前进,所以我在这个网站上发布我的问题以获得一些想法/答案。
任务是将一组值与Regex进行比较。但我没有得到理想的输出。这是我现在写的代码:
$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匹配其中任何一个。所以我用管道拆分它们,然后用两个数组值创建一个Regex。
当我与$ array的实际值数组进行比较时,它失败了。它总是转到else
部分。
我在想当我们使用正则表达式匹配时,如果确切的单词与源值匹配,它将返回true。或许我使用错误的正则表达式。
我只需要匹配确切的部分值" MBS \ FY16 \ 11月"或" MBS \ FY16 \ 6月12日"并返回匹配的值或消息。
如何解决此问题?
答案 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