2014-11-28 2 views
2

Я уже потратил более часа, пытаясь заставить простой RegEx работать. Моя модель работает, и я возвращаю $ Matches, которые, как я прочитал, должны быть хеш-таблицей. Итак, как мне получить то, что я захватил?

Код:

cls 
    $keyword = "this is a 12345 test" 
    $pattern = "\d{5}" 
    $keyword -match $pattern 
    $returnZipcode = "ERROR" 
    Write-Host "GetZipCodeFromKeyword RegEx `$Matches.Count=$($Matches.Count)" 
    $Matches | Out-String | Write-Host 
    Write-Host "`$Matches[0].Value=$($Matches[0].Value)" 
    Write-Host "`$Matches.Get_Item('0')=$($Matches.Get_Item("0"))" 
    if ($Matches.Count -gt 0) 
     { 
     $returnZipcode = $Matches[0].Value 
     } 

    # this is how hash tables work - why doesn't same work with the $Matches variable? 
    $states = @{"Washington" = "Olympia"; "Oregon" = "Salem"; California = "Sacramento"} 
    $states | Out-String | Write-Host 
    Write-Host "`$states.Get_Item('Oregon')=$($states.Get_Item("Oregon"))" 

Run результаты Время:

Name       Value 
----       ----- 
0        12345 

$Matches[0].Value= 
$Matches.Get_Item('0')= 

Name       Value 
----       ----- 
Washington      Olympia 
Oregon       Salem 
California      Sacramento 

$states.Get_Item('Oregon')=Salem 

ответ

2

$Matches является просто Хеш, то Name и Value столбцы не являются свойствами элементов. Name - это только ключ, Value - это значение.

PS C:\> $Matches 

Name       Value 
----       ----- 
0        12345 


PS C:\> $Matches[0] 
12345 

Если вы хотите, вы можете использовать Get_Item, но ключ в $Matches представляет собой целое число, а не строка:

PS C:\> $states.Get_Item('Oregon') 
Salem 
PS C:\> $Matches.Get_Item(0) 
12345 

В отличие от некоторых других языков, не все Hashtable ключи должны быть строками и Powershell в основном не будет преобразовывать числа в строки и из них, если вы не сообщите об этом.

+0

Спасибо, только что опубликовано дальше: http://stackoverflow.com/questions/27194148/powershell-match-in-function-gets-extra-true-false-when-returned Я думал, что true/false было возвращаясь как часть хеш-таблицы, все еще не уверен, почему. – NealWalters

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