Powershell替换为后引用和局部变量

时间:2014-12-09 19:36:41

标签: regex powershell backreference

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

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

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

实际:2.0-preview</version>

但是,如果我在“$1 $version $ 2”等变量之间添加空格,我会按预期获得<version> 2.0-preview </version>

思想?

谢谢, 丹

1 个答案:

答案 0 :(得分:4)

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

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

通过将变量名称放在花括号中,PowerShell可以判断一个变量的结束位置和另一个变量的开始位置。此外,确认您的原始方法确实无法在我的某个PowerShell v3系统上运行。