Какая разница между .replace и -replace в powershell?
У меня сложилось впечатление, что .replace and -replace - это то же самое, однако я обнаружил, что не могу выполнить некоторые задачи RegEx с .replace, с которым я мог бы работать. Может ли кто-нибудь указать, что мне не хватает?
Broken Regex replace:
$a=$a.Replace('.:\\LOGROOT\\', "\\$env:computername\logroot\")
Working Regex replace:
$a=$a -Replace('.:\\LOGROOT\\', "\\$env:computername\logroot\")
пс:
Следующий URL-адрес заставляет меня думать, что есть параметры .replace, с которыми я незнаком, но я не могу найти какую-либо дополнительную информацию о том, как их использовать, или как получить доступ к справке для этих параметров. http://www.computerperformance.co.uk/powershell/powershell_regex.htm
Regex.Replace(String, String, String, RegexOptions), а также:
Regex.Replace(String, String, MatchEvaluator, RegexOptions).
Спасибо
Ответы
Ответ 1
В то время как ответ @Keith Hill объясняет разницу между методом Replace
и оператором -replace
, чтобы объяснить, почему вы не можете видеть тот же результат, это потому, что вы используете метод String.Replace
, который заменяет строку и Оператор -replace
использует замену regex. Вы можете использовать Regex.Replace для этой цели, и вы должны увидеть тот же эффект:
[regex]::replace($a,'.:\\LOGROOT\\', "\\$env:computername\logroot\")
Короче говоря, оператор -replace
такой же, как Regex.Replace
(конкретная перегрузка, связанная выше), но в целом Replace()
может быть экземпляром или статическим методом, который может делать что-то совершенно отличное от -replace
Ответ 2
Это не одно и то же. .Replace
является .NET-методом либо на System.String, либо любым другим типом с методом экземпляра с именем Replace
. -replace
- это оператор PowerShell, который использует регулярные выражения. Запустите man about_operators
, чтобы узнать больше об операторе -replace
.