【问题标题】:Regex match group to string in PowerShell正则表达式匹配组到 PowerShell 中的字符串
【发布时间】:2014-12-15 17:12:45
【问题描述】:

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

    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]。

【问题讨论】:

    标签: regex windows powershell grouping


    【解决方案1】:

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

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

    注意每个索引周围的$(...)。您希望作为表达式评估的字符串文字的所有部分都需要放在$(...) 中。否则,PowerShell 只会扩展变量名,并将其他内容(如 [1])视为普通文本。

    【讨论】:

    • 工作,谢谢,需要等待几分钟才能标记为已接受。所以基本上,简单来说,它返回$matches 的类型,然后将[1] 文本附加到它,因为它不知道在该索引处评估哈希并返回实际值。谢谢,这很有帮助。
    猜你喜欢
    • 2015-03-05
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2013-12-25
    相关资源
    最近更新 更多