2012-04-17 19 views
13

Ich hatte den Eindruck, dass .replace und -replace genau das gleiche waren, aber ich stellte fest, dass ich einige RegEx-Aufgaben nicht mit replace erledigen konnte, die ich mit -replace ersetzen konnte. Könnte jemand bitte darauf hinweisen, was ich vermisse?Was ist der Unterschied zwischen .replace und -replace in Powershell?

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


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

ps: Die folgende URL führt mich zu denken, sind .replace Optionen, die ich nicht kennen bin, aber ich kann keine weiteren Informationen zu finden scheinen, wie sie verwenden, oder, wie die Hilfe für diese zugreifen Optionen. http://www.computerperformance.co.uk/powershell/powershell_regex.htm Regex.Replace (String, String, String, RegexOptions) und auch: Regex.Replace (String, String, MatchEvaluator, RegexOptions) Methoden.

Vielen Dank

+1

tun kann Ich denke '-Replace' ist ein Operator während' .Replace' ist eine Methode (auf '$ a'). –

Antwort

14

Während @Keith Hill Antwort den Unterschied zwischen Replace Methode und dem -replace Betreiber erklärt, zu erklären, warum Sie nicht das gleiche Ergebnis sehen kann, ist es, weil Sie die String.Replace Methode verwenden, die Regex String ersetzen und -replace Operator tut verwendet ersetzen . Sie können die Regex.Replace Methode für diesen Zweck verwenden und Sie sollten den gleichen Effekt sehen:

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

Kurz gesagt, der -replace Operator ist gleich wie Regex.Replace (die insbesondere Überlastung oben verbunden sind), aber im Allgemeinen Replace() Instanz sein kann, oder statische Methode, die etwas völlig anderes als -replace

9

Sie sind nicht das Gleiche. .Replace ist eine .NET-Methode entweder auf System.String oder einem anderen Typ mit einer Instanzmethode namens Replace. -replace ist ein PowerShell-Operator, der reguläre Ausdrücke verwendet. Führen Sie man about_operators aus, um weitere Informationen zum Operator -replace zu erhalten.

+3

In der Tat, um genauer zu sein 'a-replace b, c' ist die .NET-Methode [' Regex.Replace (a, b, c, RegexOptions.IgnoreCase)] '(http://msdn.microsoft.com/en -us/library/taz3ak2f.aspx). – Richard