我正在对某些数据进行正则表达式,如果$ _在“替换”部分,我也会得到内容。我已经为$ replace尝试了各种各样的东西,但似乎无法阻止这种行为。我也试过[regex] :: escape()但是最终做同样的事情,只是使用转义字符。
我需要能够在替换中容忍$ _。我可以把它变成别的东西然后做一个修复,但那很难看,我宁愿避免它。
最后,如果$ replace ='$ anythingelse'看起来按预期运行,只有$ _似乎会导致此问题。如果可以禁用所有可以解析的解析。
剧本:
$contents = 'foo' $replace = '$_ bar' $final = $contents -replace 'oo', $replace Write-Output "Contents: $contents" Write-Output "Replace: $replace" Write-Output "Final: $final"
输出:
Contents: foo Replace: $_ bar Final: ffoo bar
系统:Windows 7,PSH 2,64位
我做错了什么或这真的是一个错误?
编辑6/29:
我做了替换,所以我可以做替换。这很愚蠢,应该有一种方法来禁用解析(这会使它运行得稍快)。
$contents = 'foo' $replace = '$_ bar' **$rep = $replace -replace '\$','$$$'** $final = $contents -replace 'oo', $rep Write-Output "Contents: $contents" Write-Output "Replace: $replace" Write-Output "Final: $final"
输出
Contents: foo Replace: $_ bar Final: f$_ bar
答案 0 :(得分:4)
您的问题是替换字符串中的“$ _”表示整个输入字符串。如果你想要一个文字美元符号,你需要使用$$:
来转义它$replace = '$$_ bar'
有关详细信息,请参阅msdn上的substitutions页面。
编辑以解决问题编辑29/6
如果您只想要一个没有任何正则表达式的基本字符串替换,只需使用标准字符串替换而不是-replace
:
$final = $contents.replace('oo', $replace)