正则表达式匹配组在PowerShell中的字符串

时间:2014-10-20 16:27:58

标签: regex windows powershell grouping

我有一个正则表达式搜索字符串并创建两个匹配组:

    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]

1 个答案:

答案 0 :(得分:2)

您需要使用sub-expressions来索引哈希表:

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

注意每个索引周围的$(...)。您想要作为表达式求值的字符串文字的所有部分都需要放在$(...)内。否则,PowerShell将仅展开变量名称,并将[1]等其他内容视为普通文本。