正则表达式不在Powershell中工作

时间:2015-06-19 13:33:57

标签: regex powershell

我有一个 Powershell 文件myfile.ps1

function Do-It
{
    $items = # A command that returns a collection of strings like:
             # Element 12657 - <Description trext>
             # Element 12656 - <Description trext>
             # Element 12655 - <Description trext>
             # ...

    $pattern = 'Element\s(\d*).*';
    foreach ($item in $items) {
        $res = $item -match $pattern;
        $len = $matches.Length;
        $id = $matches[0];
        Write-Output "$len $id";
    }
}

问题是我的输出是:

1 Element 12657 - <Description trext>
1 Element 12656 - <Description trext>
1 Element 12655 - <Description trext>
...

所以找不到匹配。但是,如果我从cmd执行此操作,那么我会得到结果。

我做错了什么?需要逃避什么?感谢

2 个答案:

答案 0 :(得分:2)

看一看,看看它手动做什么:

PS U:\> $item = 'Element 12657 - <Description trext>'
PS U:\> $pattern = 'Element\s(\d*).*'
PS U:\> $Matches

Name                           Value
----                           -----
1                              12657
0                              Element 12657 - <Description trext>

我会尝试$id = $matches[1];

答案 1 :(得分:1)

正则表达式的第一个匹配是整个匹配的字符串。因此,您想要的匹配是$matches[1]。我相信$Matches.Length会返回1,因为它是一个包含两个组的匹配列表。