2015-11-28 91 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选项 –