2014-10-20 2 views
2

У меня есть регулярное выражение, которое делает поиск на строку и создает два матча группы:Regex матч группы нанизывать в PowerShell

if ($BASICEDITMESSAGECONTENT -match '(?sm)(^.*?</title>)(.*)') 
    { 
     if ($matches.Count -ge 3) 
     { 
      $BASICEDITMESSAGECONTENT = "$matches[1]$SCRIPTREFERENCE$matches[2]" 
      echo $BASICEDITMESSAGECONTENT 
      ... 
     } 
    } 

Когда я эхо его обратно, я получаю следующий результат:

System.Collections.Hashtable[1]<MYSCRIPTREFERENCE>System.Collections.Hashtable[2] 

Я не хочу System.Collections.Hashtable значения, подобные этому в строке, я просто хочу, чтобы фактическая строка значения совпадающего текста с этой группой регулярных выражений. Как я могу это сделать?

Например, когда я использую echo $matches[1], он отображает фактическое значение группы регулярных выражений, а не System.Collections.Hashtable[1].

ответ

2

Вы должны использовать sub-expressions индексировать HashTables:

$BASICEDITMESSAGECONTENT = "$($matches[1])$SCRIPTREFERENCE$($matches[2])" 

Обратите внимание на $(...) вокруг каждого индекса. Все части строковых литералов, которые вы хотите оценить как выражения, необходимо разместить внутри $(...). В противном случае PowerShell будет только расширять имена переменных и обрабатывать другие вещи, такие как [1], как обычный текст.

+1

Работал, спасибо, вам нужно будет подождать несколько минут, чтобы отметить, как принято. Таким образом, в основном, простым языком, он возвращал тип '$ matches', а затем добавлял к нему текст' [1] ', потому что он не знал, чтобы оценить хэш в этом индексе и вернуть обратно фактическое значение. Спасибо, это очень помогает. – Alexandru

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