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

mr.*_*ons 21 methods powershell 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\")
Run Code Online (Sandbox Code Playgroud)

ps:以下网址让我觉得我不熟悉.replace选项,但我似乎无法找到有关如何使用它们的任何其他信息,或者如何访问这些选项的帮助.http://www.computerperformance.co.uk/powershell/powershell_regex.htm Regex.Replace(String,String,String,RegexOptions)以及:Regex.Replace(String,String,MatchEvaluator,RegexOptions)方法.

谢谢

man*_*lds 19

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

[regex]::replace($a,'.:\\LOGROOT\\', "\\$env:computername\logroot\")
Run Code Online (Sandbox Code Playgroud)

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

  • 很好,但请注意 `-regex` 和 `[regex]::Replace()` 之间的一个重要区别:`-regex` 默认情况下不区分大小写(就像 PowerShell 通常那样);更具体地说,因此区分大小写的变体“-creplace”对应于 .NET 方法。 (3认同)

Kei*_*ill 16

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

  • 实际上,更具体的是"a -replace b,c`是.NET方法[`Regex.Replace(a,b,c,RegexOptions.IgnoreCase)`](http://msdn.microsoft.com/en-我们/库/ taz3ak2f.aspx). (5认同)