2013-04-22 4 views
1

저는 꽤 언젠가 알아 내려고 노력했습니다. PowerShell을 사용하여 다음 문자열에서 PID 값을 얻으려면 어떻게해야합니까? 나는 REGEX가 갈 길인 줄 알았지 만 문법을 이해할 수는 없다. PID를 제외하고 모두 가치가있는 부분은 동일하게 유지됩니다.문자열 가운데에서 변수 값을 추출하십시오.

$foo = <VALUE>I am just a string and the string is the thing. PID:25973. After this do that and blah blah.</VALUE> 

나는 당신이 이전과 부분 후에 당신이 찾고있는 무엇을 표시 할 수 있습니다 귀하의 정규식에 대한 정규식

[regex]::Matches($foo, 'PID:.*') | % {$_.Captures[0].Groups[1].value} 
[regex]::Matches($foo, 'PID:*?>') | % {$_.Captures[0].Groups[1].value} 
[regex]::Matches($foo, 'PID:*?>') | % {$_.Captures[0].Groups[1].value} 
[regex]::Matches($foo, 'PID:*?>(.+).') | % {$_.Captures[0].Groups[1].value} 
+0

당신이 시도했습니다 정규식 무엇을 보여줄 수 –

답변

2

에 다음과 같은 노력했다. PID:.*은 PID부터 문자열의 끝까지를 찾습니다.

캡처 그룹을 사용하려면 ()을 정규 표현식에 포함시켜 그룹을 정의해야합니다.

그래서 크기에 대해이 작업을 입어 : 나는 PID:(\d+)의 정규식을 사용하고

[regex]::Matches($foo,'PID:(\d+)') | % {$_.Captures[0].Groups[1].value} 

. \d+은 "하나 이상의 숫자"를 의미합니다. 그 주위의 괄호는 (\d+)입니다. 액세스 할 수있는 그룹은 Captures[0].Groups[1]입니다.

+0

코드의 라인의 설명 주셔서 대단히 감사합니다? 어떻게 작동하는지 완벽하게 작동합니다. 그리고 나에게 더 나은 이해를 제공했습니다. – Radagast

1

다른 옵션이 있습니다. 기본적으로 그것은 숫자 후 첫 번째 캡처 그룹 (에 모든 것을 대체 'PID를':

$foo -replace '^.+PID:(\d+).+$','$1' 
관련 문제