Powershell 替换为反向引用和局部变量

Dan*_*erZ 0 regex powershell backreference

我正在尝试使用串联后向引用和局部变量的字符串替换模式:

(Get-Content $nuspecPath) | Foreach-Object {$_ -replace "(<version>).+(<\/version>)", "`$1$version`$2"} | Set-Content $nuspecPath   
Run Code Online (Sandbox Code Playgroud)

预期的: <version>2.0-preview</version>

实际的: 2.0-preview</version>

但是,如果我在像“ $1 $version$2”这样的变量之间添加空格,我会得到<version> 2.0-preview </version>预期的结果。

想法?

谢谢,丹

Kei*_*ill 7

嗯,这对我有用,因为您最初在 PowerShell v4 上拥有它。但是当我遇到这样的问题时,我通常用花括号来解决它,例如 ${1}

$version = '2.0-preview'
"<version>1.0.0.0</version>" -replace "(<version>).+(<\/version>)", "`${1}$version`$2"
Run Code Online (Sandbox Code Playgroud)

通过将变量名放在花括号中,PowerShell 可以判断一个变量的结束位置和另一个变量的开始位置。此外,确认您的原始方法确实不适用于我的 PowerShell v3 系统之一。