2016-02-09 1 views
1

Я новичок в сценариях PowerShell и работаю над POC. Я застрял и не могу продолжить дальше, поэтому я отправляю свой вопрос на этом сайте, чтобы получить некоторые идеи/ответы.Как проверить соответствие массива определенной строковой части в PowerShell?

Задача состоит в том, чтобы сравнить массив значений с 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 \ 12 июня» и возвратить совпавшее значение или сообщение.

Как решить эту проблему?

ответ

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 

 Смежные вопросы

  • Нет связанных вопросов^_^