2012-04-17 17 views
13

Ho avuto l'impressione che .replace e -replace fossero la stessa identica cosa, tuttavia ho scoperto che non potevo svolgere alcuni compiti RegEx con .replace che potevo con -replace. Qualcuno potrebbe per favore indicare cosa mi manca?Qual è la differenza tra .replace e -replace in powershell?

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


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

ps: Il seguente URL mi porta a pensare che ci sono opzioni .Rimontare Sono familiarità con, ma non posso sembrano trovare ulteriori informazioni su come usarli, o il modo di accedere alla guida per queste opzioni. http://www.computerperformance.co.uk/powershell/powershell_regex.htm Regex.Replace (String, String, String, RegexOptions) e anche: Regex.Replace (String, String, MatchEvaluator, RegexOptions).

Grazie

+1

Penso che '-Replace' è un operatore mentre' .Replace' è un metodo (su '$ a'). –

risposta

14

Mentre la risposta di @Keith Hill spiega la differenza tra Replace metodo e l'operatore -replace, per spiegare il motivo per cui si potrebbe non vedere lo stesso risultato, è perché si sta utilizzando il metodo String.Replace che fa stringa sostituire e -replace operatore utilizza regex sostituire . È possibile utilizzare il metodo Regex.Replace per questo scopo e si dovrebbe vedere lo stesso effetto:

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

In breve, l'operatore -replace è uguale Regex.Replace (particolare sovraccarico legato sopra), ma in generale Replace() può essere istanza o metodo statico che può fare qualcosa di completamente diverso da -replace

9

Non sono la stessa cosa. .Replace è un metodo .NET su System.String o qualsiasi altro tipo con un metodo di istanza denominato Replace. -replace è un operatore PowerShell che utilizza espressioni regolari. Eseguire man about_operators per visualizzare ulteriori informazioni sull'operatore -replace.

+3

In effetti, per essere più specifici 'a -replace b, c' è il metodo .NET [' Regex.Replace (a, b, c, RegexOptions.IgnoreCase) '] (http://msdn.microsoft.com/en -us/library/taz3ak2f.aspx). – Richard