2015-01-29 2 views
0

PowerShell을 사용하여 일부 텍스트를 분할하려고하는데 정규식을 약간 실험하고 있는데 정확히 "|" 문자는 PowerShell 정규식에서 수행됩니다. 예를 들어, 나는 다음 코드 줄이 있습니다| PowerShell regex

"[02]: ./media/active-directory-dotnet-how-to-use-access-control/acs-01.png" | select-string '\[\d+\]:' | foreach-object {($_ -split '\[|\]')} 

이 코드 줄을 실행하면 나에게 다음과 같은 출력을 제공합니다

-blank line- 
02 
: ./media/active-directory-dotnet-how-to-use-access-control/acs-01.png 

내가하지 않고 코드를 실행하면 "|"를

[02]: ./media/active-directory-dotnet-how-to-use-access-control/acs-01.png 

내가 코드를 수정하는 경우 :

"[02]: ./media/active-directory-dotnet-how-to-use-access-control/acs-01.png" | select-string '\[\d+\]:' | foreach-object {($_ -split '\[\]')} 

내가 [] 제거되고 (기본적으로 그냥 표시있어 선택 - 문자열 출력하지 않고 다음과 같은 출력을 얻을 : 같은 -split 문 다음과 같이 실행 : 출력에서 ​​

"[02]: ./media/active-directory-dotnet-how-to-use-access-control/acs-01.png" | select-string '\[\d+\]:' | foreach-object {($_ -split '\[|')} 

을의 [는 처음부터 제거되지만 출력은 각 문자 후에 캐리지 리턴 (I 전체를 포함하지 않았다있다 공간 목적을위한 출력).

0 
2 
] 
: 

. 
/
m 
e 

답변

1

대답은 이미 |의 내용을 설명하지만 위의 각 예제에서 어떤 일이 일어나는지 설명하고 싶습니다.

  1. -split '\[|\]'

    : 당신이 일치하려는 중 하나는 결과를 얻을 이유 [ 또는 ]. 이 예에서 | 기호를 생략하고 있기 때문에 사용자가 캐릭터 분할 요청할 시퀀스[]을 : 제 [

  2. -split '\[\]' 전 라인의 시작으로 표시되는 공백 인 제 인 빈 행 귀하의 문자열에 나타나지 않습니다. 이것은 모든 문자에서 분리되는 $_.split('\[\]') 코드와 대조됩니다. 이는 의도적으로 설계된 동작입니다.

  3. -split '\[|' : 여기서는 | 연산자에 대한 오른쪽 피연산자를 지정하지 않았다고 경고합니다.이 정규식이 지정 될 때 Regex101에서 도움을 인용합니다 : 항상 찾을 수 있기 때문에 빈 대안 효과적으로 시점에서 정규식을 잘라 :

경고 (NULL, 어떤 위치와 일치) 제로 너비 일치

마지막 예제가 인 모든 요소로 분할 된 이유는 다음과 같습니다. 또한, 나는 이것 중 하나가 PowerShell이라고 생각하지 않는다. 이 동작은 다른 엔진에서도 볼 수 있습니다.

+0

온라인 정규 표현식 테스터에 대한 자세한 설명과 포인터를 제공해 주셔서 감사합니다. – DBS

0

월터 Mitty이 올바른지, |는 교대입니다.

Powershell에서 [Regex]::Escape("string")을 사용할 수도 있으며 모든 특수 문자가 이스케이프 된 문자열을 반환합니다. 그래서 당신은 문자 그대로 (또는 특정 문자가 정규식에서 특별한 의미를 가지는지 또는 특별한 의미를 가질 수 있는지를 결정하기 위해) 일치시키고 자하는 모든 문자열에서 그것을 사용할 수 있습니다.