gpt4 book ai didi

regex - 如何检查数组是否与PowerShell中的特定字符串部分匹配?

转载 作者:行者123 更新时间:2023-12-02 23:59:01 26 4
gpt4 key购买 nike

我是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中的任何一个匹配。所以我用管道将它们分开,然后用两个数组值创建一个正则表达式。

当我与实际值数组$ array比较时,它失败了。它总是转到 else部分。

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

我只需要匹配精确的零件值“ MBS \ FY16 \ 11 May ”或“ MBS \ FY16 \ 6月”,然后返回匹配的值或一条消息。

我该如何解决这个问题?

最佳答案

您无需创建新的[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

关于regex - 如何检查数组是否与PowerShell中的特定字符串部分匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35295579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com