Dot-Net
PowerShell -match 運算符和多個組
我有以下在 PowerShell 中處理的日誌條目我正在嘗試使用
-match運算符提取所有活動名稱和持續時間,但我只得到一個匹配組。當我在 C# 中使用該對像做同樣的事情時,我並沒有得到我看到的所有匹配項Regex。有人可以解釋我做錯了什麼嗎?相關 PowerShell 腳本
$formattedMessage -match "(Get\sClient\sModel|Parse\sExpression|Get\sAbstract\sQuery|Compile\sQuery|Execute\sQuery|Get\sQuery\sPlan\sComplexity|Async\sTotal|Total)\s-\sduration\(([0-9]*)" | out-null $matches輸出
Name Value ---- ----- 0 Get Client Model - duration(0 1 Get Client Model 2 0日誌條目範例:
Timestamp: 11/9/2009 6:48:41 PM Message: Category: QueryService Priority: 3 EventId: 1001 Severity: Information Title: SPARQL Query Response Machine: SPOON16-SERVER App Domain: KnowledgeBaseHost.exe ProcessId: 2040 Process Name: D:\QueryService\QSHost.exe Thread Name: Win32 ThreadId:8092 Extended Properties: Key - Workflow_cbbdd58b-e574-4054-88d4-1dd7a56dc9d9 Timeout - 1800 Result Format - WireTable Result from Registry - False Compiled Query from Cache - True Result Count - 28332 Query Plan Complexity - 661622 Get Client Model - duration(0) start(0) Parse Expression - duration(0) start(0) Get Abstract Query - duration(0) start(0) Compile Query - duration(0) start(0) Get Query Plan - duration(0) start(1) Execute Query - duration(63695) start(1) Get Query Plan Complexity - duration(0) start(63696) Get Executed Operations - duration(0) start(63696) Total - duration(63696) start(0) Async Total - duration(63696) start(0)
您可以使用 V2 中的Select-String cmdlet 執行此操作,但您需要指定*-AllMatches*開關,例如:
$formattedMessage | Select-String 'regexpattern' -AllMatches請記住,對於
-match運算符,您所做的主要事情是尋找“a”匹配,即正則表達式模式是否匹配?
我能夠通過定義一個正則表達式然後在該正則表達式上呼叫*.Matches來獲得所有組。我仍然很想知道這是否可以使用PowerShell 中的-match運算符來完成。*
$detailRegex = [regex]"(Get\sClient\sModel|Parse\sExpression|Get\sAbstract\sQuery|Compile\sQuery|Execute\sQuery|Get\sQuery\sPlan\sComplexity|Async\sTotal|Total)\s-\sduration\(([0-9]*)" $detailRegex.Matches($formattedMessage)