PowerShell RegEx匹配所有可能的匹配

时间:2015-11-28 01:44:28

标签: regex powershell

我有以下脚本,其中包含一些RegEx以捕获此站点上的特定信息。

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

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

这与最后一位艺术家相匹配。我想做的就是这样做,这样它就会贯穿始终,并按照从上到下的顺序匹配此页面上的每位艺术家。

1 个答案:

答案 0 :(得分:3)

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}