2012-04-17 113 views
13

我下印象.replace和-replace是同樣的事情,但是我發現我無法完成一些任務正則表達式與.replace是我能與-replace。有人能指出我錯過了什麼嗎?.replace和-replace in powershell有什麼區別?

Broken Regex replace: 
$a=$a.Replace('.:\\LOGROOT\\', "\\$env:computername\logroot\") 


Working Regex replace: 
$a=$a -Replace('.:\\LOGROOT\\', "\\$env:computername\logroot\") 

PS: 以下網址讓我覺得有我不熟悉.replace選擇,但我似乎無法找到如何使用它們的任何其他信息,或如何訪問這些幫助選項。 http://www.computerperformance.co.uk/powershell/powershell_regex.htm Regex.Replace(字符串,字符串,字符串,RegexOptions),並且還: Regex.Replace(字符串,字符串,MatchEvaluator,RegexOptions)的方法。

謝謝

+1

我覺得完全不同的靜態方法'-Replace'是運營商,而'.Replace'是一個方法(在'$了')。 – 2012-04-17 02:31:32

回答

14

雖然@Keith希爾的回答解釋Replace方法和-replace運營商之間的區別,解釋爲什麼您可能看不到相同的結果,那是因爲你使用的是String.Replace方法,做字符串替換和-replace運營商使用正則表達式替換。您可以使用Regex.Replace方法用於此目的,你會看到同樣的效果:

[regex]::replace($a,'.:\\LOGROOT\\', "\\$env:computername\logroot\") 

總之,-replace運營商一樣Regex.Replace(具體超載上面鏈接),但一般Replace()可以實例或可以做任何事情,從-replace

9

他們不是一回事。 .Replace是System.String或任何其他類型的.NET方法,實例方法名爲Replace-replace是使用正則表達式的PowerShell運算符。運行man about_operators以查看有關-replace運營商的更多信息。

+3

的確,更具體'一個-replace B,C'是.NET方法['Regex.Replace(A,B,C,RegexOptions.IgnoreCase)'](http://msdn.microsoft.com/en -us /庫/ taz3ak2f.aspx)。 – Richard 2012-04-17 07:57:21