2013-04-22 3 views
1

Я пытался выяснить, что-то произошло. как получить значение PID из следующей строки с помощью powershell? Я думал, что REGEX - это путь, но я не могу понять синтаксис. Для чего стоит все, кроме ПИД-регулятора, останется прежним.извлечь значение переменной из середины строки

$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:.* найдет все от ПИД-кода до конца строки.

И для использования группы захвата вы хотите иметь в своем регулярном выражении ( и )10, которые определяют группу.

Так попробовать это для размера:

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

Я использую регулярное выражение PID:(\d+). Значение \d+ означает «одна или несколько цифр». Скобки вокруг этого (\d+) идентифицируют его как группу, к которой я могу получить доступ, используя Captures[0].Groups[1].

+0

Большое спасибо за строки кода и объяснения? как это работает. Это работает отлично, и вы также обеспечили мне лучшее понимание. – Radagast

1

Вот еще один вариант. В основном он заменяет все с группой первого захвата (что цифры после «Pid:»:

$foo -replace '^.+PID:(\d+).+$','$1' 
Смежные вопросы