我有一个正则表达式搜索字符串并创建两个匹配组:
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]
。
答案 0 :(得分:2)
您需要使用sub-expressions来索引哈希表:
$BASICEDITMESSAGECONTENT = "$($matches[1])$SCRIPTREFERENCE$($matches[2])"
注意每个索引周围的$(...)
。您想要作为表达式求值的字符串文字的所有部分都需要放在$(...)
内。否则,PowerShell将仅展开变量名称,并将[1]
等其他内容视为普通文本。