PowerShell中.replace和-replace之间的区别是什么?

时间:2012-04-17 02:06:05

标签: powershell methods replace

我的印象是.replace和-replace是完全相同的东西,但是我发现我无法使用.replace完成一些RegEx任务,我可以使用-replace。有人可以指出我错过了什么吗?

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(String,String,String,RegexOptions)以及: Regex.Replace(String,String,MatchEvaluator,RegexOptions)方法。

谢谢

2 个答案:

答案 0 :(得分:17)

虽然@Keith Hill的回答解释了Replace方法与-replace运算符之间的区别,但为了解释为什么您可能看不到相同的结果,这是因为您正在使用String.Replace执行字符串替换的方法和-replace运算符使用正则表达式替换。您可以使用Regex.Replace方法来实现此目的,您应该会看到相同的效果:

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

简而言之,-replace运算符与Regex.Replace(上面链接的特定重载)相同,但通常Replace()可以是实例或静态方法,可以做任何完全不同的事情来自-replace

答案 1 :(得分:14)

他们不是一回事。 .Replace是System.String上的.NET方法或具有名为Replace的实例方法的任何其他类型。 -replace是使用正则表达式的PowerShell运算符。运行man about_operators以查看有关-replace运营商的更多信息。