我正在做一些數據的正則表達式,如果$ _在「替換」部分,我也會得到內容。我已經嘗試了各種各樣的替換,但似乎無法阻止這種行爲。我也嘗試過[正則表達式] :: escape(),但是最終做同樣的事情,只是使用轉義字符。PowerShell可能的錯誤取代,或者我做錯了嗎?
我需要能夠容忍替換中的$ _。我可以做一些其他的事情,稍後做一些修正,但這很醜陋,我寧願避免它。
最後如果$ 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
剛所以我很清楚,您的替換文本字面上是一個美元符號,後面跟着下劃線? IOW - 你不是想用powershell管道變量做些什麼? – David
正確。我想輸出爲 最後:f $ _吧 – user1489948
那麼這很有趣。這看起來像一個錯誤。我嘗試了其他命令,例如'write-output'$ _ bar'',它按預期工作。所以,這對我來說似乎是一個錯誤。當然,只要我這麼說,那些比我更聰明的人會來,並告訴我們它不是。 – David