我正在尝试将所有占位符放在具有模式@ {}的文件中。我试图掌握所有变量,但我无法定义结束括号的模式以及内部的整个单词。以下是我目前的代码
$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}。我尝试用很多变化来改变$模式而且没有帮助
任何帮助?
答案 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)