Вопрос по replace – В чем разница между .replace и -replace в powershell?

20

У меня сложилось впечатление, что .replace и -replace - это одно и то же, но я обнаружил, что не могу выполнить некоторые задачи RegEx с .replace, которые я мог бы с -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).

Спасибо

Я думаю-Replace оператор в то время как.Replace это метод (на$a). user166390

Ваш Ответ

2   ответа
17

Replace метод и-replace оператор, чтобы объяснить, почему вы можете не увидеть тот же результат, это потому, что вы используетеString.Replace метод, который заменяет строку и-replace Оператор использует регулярное выражение замены. Вы можете использоватьRegex.Replace Метод для этого и вы должны увидеть тот же эффект:

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

Короче говоря,-replace оператор такой же какRegex.Replace (конкретная перегрузка, связанная выше), но в целомReplace() может быть экземпляром или статическим методом, который может делать что-то совершенно отличное от-replace

14

.Replace метод .NET в System.String или любой другой тип с методом экземпляра с именемReplace. -replace является оператором PowerShell, использующим регулярные выражения Бежатьman about_operators чтобы увидеть больше информации о-replace оператор.

Error: User Rate Limit Exceededa -replace b,cError: User Rate Limit ExceededRegex.Replace(a, b, c, RegexOptions.IgnoreCase).

Похожие вопросы