Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何检查数组是否与PowerShell中的特定字符串部分匹配?_Regex_Powershell_Powershell 3.0_Powershell 4.0 - Fatal编程技术网

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

Regex 如何检查数组是否与PowerShell中的特定字符串部分匹配?,regex,powershell,powershell-3.0,powershell-4.0,Regex,Powershell,Powershell 3.0,Powershell 4.0,我是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\F

我是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的实际值数组进行比较时,它失败了。它总是转到
其他部分

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

我只需要匹配准确的零件值“MBS\FY16\11 May”或“MBS\FY16\12 June”并返回匹配的值或消息


如何解决此问题?

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