2012-04-17 59 views
13

Tôi đã được ấn tượng rằng .replace và -replace là những điều tương tự, tuy nhiên tôi thấy rằng tôi không thể thực hiện một số nhiệm vụ RegEx với .replace mà tôi có thể với -replace. Ai đó có thể vui lòng chỉ ra những gì tôi đang thiếu?Sự khác nhau giữa .replace và -replace trong powershell là gì?

Broken Regex replace: 
$a=$a.Replace('.:\\LOGROOT\\', "\\$env:computername\logroot\") 


Working Regex replace: 
$a=$a -Replace('.:\\LOGROOT\\', "\\$env:computername\logroot\") 

ps: URL sau dẫn tôi nghĩ rằng có những lựa chọn .replace Tôi không quen thuộc với, nhưng tôi không thể dường như để tìm thêm bất kỳ thông tin về làm thế nào để sử dụng chúng, hoặc làm thế nào để truy cập vào sự giúp đỡ đối với những tùy chọn. http://www.computerperformance.co.uk/powershell/powershell_regex.htm Regex.Replace (Chuỗi, Chuỗi, Chuỗi, RegexOptions) và cũng: Các phương thức Regex.Replace (String, String, MatchEvaluator, RegexOptions).

Cảm ơn bạn

+1

Tôi nghĩ '-Replace' là toán tử trong khi' .Replace' là phương thức (trên '$ a'). –

Trả lời

14

Trong khi câu trả lời @Keith Hill giải thích sự khác biệt giữa Replace phương pháp và -replace điều hành, để giải thích lý do tại sao bạn có thể không nhìn thấy kết quả tương tự, đó là vì bạn đang sử dụng phương pháp String.Replace mà làm chuỗi thay thế và -replace điều hành sử dụng regex thay thế . Bạn có thể sử dụng phương pháp Regex.Replace cho mục đích này và bạn sẽ thấy tác dụng tương tự:

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

Nói tóm lại, các nhà điều hành -replace là giống như Regex.Replace (sự quá tải đặc biệt liên kết ở trên), nhưng nhìn chung Replace() có thể dụ hoặc phương pháp tĩnh có thể thực hiện bất kỳ điều gì hoàn toàn khác với -replace

9

Chúng không giống nhau. .Replace là một phương thức .NET hoặc trên System.String hoặc bất kỳ kiểu nào khác với một phương thức instance có tên là Replace. -replace là một toán tử PowerShell sử dụng cụm từ thông dụng. Chạy man about_operators để xem thêm thông tin về nhà điều hành -replace.

+3

Thật vậy, để cụ thể hơn 'a -replace b, c' là phương thức .NET ['Regex.Replace (a, b, c, RegexOptions.IgnoreCase)'] (http://msdn.microsoft.com/vi -us/library/taz3ak2f.aspx). – Richard

Các vấn đề liên quan