2014-05-14 1 views
6

powershell에서 정규식 문자를 이스케이프 처리하는 데 더 좋은 옵션이 있는지 궁금합니다. C#에 Regex.Escape가 있지만 PowerShell에 자체 메서드가 있는지 확실하지 않습니다. ...powershell : 문자열에서 모든 regex 문자를 이스케이프 처리하는 방법

이것은 내가 지금 뭐하는 거지입니다 :

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

답변

14

PowerShell은 정확히 같은 방법으로 호출 할 수 있습니다 :

[Regex]::Escape($regexStr) 

을하지만 당신은 심지어 사용하여 교체를 개선 할 수있는 단지 시 ngle 정규식 대체 :

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

그러나, 나는 아마 아직도 그 문자 클래스에서 몇 가지 메타 문자가 놓친, 그래서 그냥 [regex]::Escape 방법을 사용합니다.

+0

필자의 경우 두 번째 제안 (공백 문자를 이스케이프 처리하지 않기 때문에'-replace' 사용)을 선호합니다. 그러나 하나의 수정이 필요합니다. 마지막 인수는 작동하기 위해서는'\\ $ &'가 아니라'\ $ &'이어야합니다. 이것은 PowerShell이지 C# :-)가 아닙니다. –

관련 문제