24

我的印象是 .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:下面的 URL 让我认为有 .replace 选项我不熟悉,但我似乎找不到任何关于如何使用它们的附加信息,或者如何访问这些选项的帮助。http://www.computerperformance.co.uk/powershell/powershell_regex.htm Regex.Replace(String, String, String, RegexOptions) 以及:Regex.Replace(String, String, MatchEvaluator, RegexOptions) 方法。

谢谢

4

2 回答 2

27

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

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

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

于 2012-04-17T04:49:53.503 回答
18

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

于 2012-04-17T02:57:34.070 回答