2015-11-28 88 views
1

我有以下腳本,其中包含一些正則表達式以捕獲此站點上的特定信息。PowerShell正則表達式匹配所有可能的匹配

$Top40Response = Invoke-WebRequest -UseBasicParsing -Uri 'https://www.radioinfo.com.au/knowledge/chart' 

$Top40Response.Content -match '<td\Wclass="twRank">[\s\S]+artist">([^<]*)' 
$matches 

這是匹配的最後一個 '藝術家'。我想要做的就是讓它能夠貫穿始終,並按照從上到下的順序匹配此頁面上的每位藝術家。

回答

2

PowerShell的-match只返回第一個匹配項。您必須使用Select-String-AllMatches參數或[regex]::Matches

Select-String

$Top40Response = Invoke-WebRequest -UseBasicParsing -Uri 'https://www.radioinfo.com.au/knowledge/chart' 

$Top40Response.Content | 
    Select-String -Pattern '<td\s+class="artist">(.*?)<\/td>' -AllMatches | 
     ForEach-Object {$_.Matches} | 
      ForEach-Object {$_.Groups[1].Value} 

[regex]::Matches

$Top40Response = Invoke-WebRequest -UseBasicParsing -Uri 'https://www.radioinfo.com.au/knowledge/chart' 

$Top40Response.Content | 
    ForEach-Object {[regex]::Matches($_, '<td\s+class="artist">(.*?)<\/td>')} | 
     ForEach-Object {$_.Groups[1].value} 
+0

太好了,我喜歡使用選擇串和-AllMatches選項 –