Regex 是否有一种较短的方法将组从Powershell正则表达式中拉出?

Regex 是否有一种较短的方法将组从Powershell正则表达式中拉出?,regex,powershell,Regex,Powershell,在PowerShell中,我发现自己为了比赛一次又一次地做这种事情: some-command | select-string '^(//[^#]*)' | %{some-other-command $_.matches[0].groups[1].value} 所以基本上-运行一个生成文本行的命令,对于每一行,我想在行内的正则表达式捕获上运行一个命令(如果匹配的话)。看起来很简单。上述方法可行,但有没有一种更简单的方法来撤出那些正则表达式捕获组?如果我没记错的话,Perl有$1等等。

在PowerShell中,我发现自己为了比赛一次又一次地做这种事情:

some-command | select-string '^(//[^#]*)' |
     %{some-other-command $_.matches[0].groups[1].value}
所以基本上-运行一个生成文本行的命令,对于每一行,我想在行内的正则表达式捕获上运行一个命令(如果匹配的话)。看起来很简单。上述方法可行,但有没有一种更简单的方法来撤出那些正则表达式捕获组?如果我没记错的话,Perl有$1等等。波什必须有类似的东西,对吗?我在SO上看到过“$matches”引用,但不知道是什么让它被设置的


顺便说一句,我对PowerShell非常陌生,刚刚开始学习。

您可以使用
-match
操作符将您的命令重新格式化为:

some-command | Foreach-Object { if($_ -match '^(//[^#]*)') { some-other-command $($matches[1])}}
你可以试试这个:

Get-Content foo.txt | foreach { some-othercommand [regex]::match($_,'^(//[^#]*)').value } 
命名替换

'foo bar' -replace '(?<First>foo).+', '${First}'
 'foo bar' -replace '(foo).+(ar)', '$2 z$2 $1'

返回:ar zar foo

Eh?他正在匹配一行,该行以双斜杠(//)开头,贪婪地匹配直到(但不包括)第一个散列(#)。没有终点标记,所以他没有特别匹配整条线。是的,这就是我一直在寻找的东西。谢谢你的编辑,巴斯。对我来说,如果输入不匹配,就会输出一个空行。”s的答案与此类似,但只输出匹配项。