2014-05-14 17 views
6

Tôi tự hỏi nếu có một tùy chọn tốt hơn để thoát khỏi các ký tự regex trong PowerShell, tôi biết C# có Regex.Escape, nhưng tôi không chắc chắn nếu PowerShell có phương pháp riêng của nó ...powershell: làm thế nào để thoát khỏi tất cả các ký tự regex từ một chuỗi

Đây là những gì tôi đang làm vào lúc này:

$escapedStr = $regexStr -replace "\+","\+" -replace "\[","\[" -replace "\]","\]" -replace "\(","\(" -replace "\)","\)" 

Trả lời

14

PowerShell có thể gọi cùng một phương pháp chính xác:

[Regex]::Escape($regexStr) 

Nhưng bạn thậm chí có thể cải thiện thay thế của bạn bằng cách sử dụng chỉ là một si regex ngle thay thế:

$regexStr -replace '[[+*?()\\.]','\$&' 

Tuy nhiên, tôi có lẽ vẫn còn bỏ lỡ một vài metacharacters từ đó lớp nhân vật, vì vậy chỉ cần sử dụng phương pháp [regex]::Escape.

+0

Vì mục đích của tôi, tôi thường thích đề xuất thứ hai của bạn (sử dụng '-replace') vì nó không thoát khỏi khoảng trắng. Tuy nhiên, bạn cần một sửa chữa. Đối số cuối cùng phải là '\ $ &' thay vì '\\ $ &' để nó hoạt động. Đây là PowerShell, không phải C# :-). –

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