使用Powershell从模式@ {}获取所有占位符

时间:2016-04-15 01:03:43

标签: powershell powershell-v3.0

我正在尝试将所有占位符放在具有模式@ {}的文件中。我试图掌握所有变量,但我无法定义结束括号的模式以及内部的整个单词。以下是我目前的代码

$SampleText = "I need all the variables with @{abc} @{def}
and @{xyz}"
$Pattern = '@{\w*'
$SampleText | Select-String -AllMatches -Pattern $Pattern 
| Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value

这样做我只得到@ {abc,@ {def和@ {xyz作为输出。我需要获得整个@ {abc},@ {def}和@ {xyz}。我尝试用很多变化来改变$模式而且没有帮助

任何帮助?

2 个答案:

答案 0 :(得分:1)

这是一个更简洁的解决方案(PSv3 +):

 $SampleText | % { [regex]::Matches($_, '@\{\w+\}').Value }

请注意,即使您在没有\的情况下逃离 - 在您的特定正则表达式中转义{},您通常也应该这样做,因为它们是量词中使用的元字符(例如,{2}指定重复计数为2)。

[regex]是类型[System.Text.RegularExpressions.Match]的PowerShell类型加速器,它提供的功能超出了PowerShell的-match运算符所提供的功能。

在这种情况下,静态Matches方法返回输入字符串中指定正则表达式的所有匹配项,作为[System.Text.RegularExpressions.Match]个实例。 每个此类实例都在其.Value属性中记录匹配的字符串,因此将.Value应用于整个匹配集合(类型为[System.Text.RegularExpressions.MatchCollection]),各个匹配项将作为数组返回字符串。

答案 1 :(得分:0)