Подтвердить что ты не робот

Какая разница между .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).

Спасибо

4b9b3361

Ответ 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.