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}
4

2 回答 2

3

对于您的正则表达式,您需要指出您要查找的部分之前和之后的内容。 PID:.*将找到从 PID 到字符串末尾的所有内容。

并且要使用捕获组,您需要在您的正则表达式中拥有一些(),它定义了一个组。

所以试试这个尺寸:

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

我正在使用PID:(\d+). 意思是“\d+一个或多个数字”。周围的括号将其(\d+)标识为我可以使用 访问的组Captures[0].Groups[1]

于 2013-04-22T17:39:08.457 回答
1

这是另一种选择。基本上它用第一个捕获组替换所有内容(这是'pid:'之后的数字:

$foo -replace '^.+PID:(\d+).+$','$1'
于 2013-04-22T17:51:27.050 回答