我的印象是.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)方法。
谢谢
答案 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
运营商的更多信息。