2011-09-13 75 views
8

字符串我想從該字符串從與正則表達式和Powershell的

阻塞的進程報告&#x0Aprocess ID = 「process435d948」 taskpriority = 「0」 logused = 「0」 waitresource該=提取提取特定數據「RID:7:1:1132932:0」waittime = 「3962166」ownerId =「4641198」transactionname =「SELECT」lasttranstarted =「2011-09-13T17:21:54.950」XDES =「0x80c5f060」lockMode =「S」 schedulerid = 「4」 KPID = 「18444」 狀態= 「停賽 結束」 SPID = 「58」 SBID = 「0」 ECID = 「0」

粗體值,但只有值或58.此值可以使用不同的值,有時爲80或1000等,但始終> 50.

如何使用正則表達式和posh來做到這一點?

回答

25

的快速和骯髒的:

$found = $string -match '.*spid="(\d+)".*' 
if ($found) { 
    $spid = $matches[1] 
} 

其中$string是你上面提到的字符串。這將匹配spid =「somenumberhere」的任何字符串,並將該數字轉換爲匹配的組,您可以使用$matches[1]進行提取。

+0

爲什麼所有的'*'在正則表達式? – manojlds

+1

'。*'會匹配該行之前和之後的任何內容,如果您使用了''。* spid =「(\ d +)」,則它真的是唯一必需的。* $'' – Thymine

+0

您可以將它們排除在外,而不是肯定對任何一種方式的性能影響。把它們排除在外可能會更清潔/更快,並沒有真正考慮它。 –

0

除此之外如$string

然後做

$string -match 'spid="(\d+)"' 

如果有比賽,你想要的值將在$matches[1]