Php 如何仅获取一些href属性

Php 如何仅获取一些href属性,php,Php,我有这段PHP代码,我正试图提取一些信息,但我停下来执行以下步骤: $site = "http://www.sports-reference.com/olympics/countries"; $site_html = file_get_html($site); $country_dirty = $site_html->getElementById('div_countries'); foreach($country_dirty->find('img') as $l

我有这段PHP代码,我正试图提取一些信息,但我停下来执行以下步骤:

$site = "http://www.sports-reference.com/olympics/countries";
$site_html = file_get_html($site);

$country_dirty = $site_html->getElementById('div_countries');

        foreach($country_dirty->find('img') as $link){

            $country = $link->alt;
            $link_country = "$site/$country";
            $link_country_html = file_get_html($link_country);

            $link_season = $link_country_html->getElementById('div_medals');

                foreach($link_season->find('a') as $season){


                    echo $link_year_season = $season->href . "\n";

                    //echo $link_season = strstr ($link_year_season,'summer') . "\n";

                }
            }
变量$link\u year\u seasure为我提供以下输出:

/olympics/countries/AFG/summer/2012/
/olympics/athletes/ba/nesar-ahmad-bahawi-1.html
/olympics/athletes/ni/rohullah-nikpai-1.html
/olympics/countries/AFG/summer/2008/
/olympics/athletes/ba/nesar-ahmad-bahawi-1.html
/olympics/athletes/ni/rohullah-nikpai-1.html
/olympics/countries/AFG/summer/2004/
/olympics/countries/AFG/summer/1996/
/olympics/countries/AFG/summer/1988/
/olympics/countries/AFG/summer/1980/
/olympics/countries/AFG/summer/1972/
.....
我想知道是否可以只获得以下输出:

/olympics/countries/AFG/summer/2012/
/olympics/countries/AFG/summer/2008/
/olympics/countries/AFG/summer/2004/
/olympics/countries/AFG/summer/1996/
/olympics/countries/AFG/summer/1988/
/olympics/countries/AFG/summer/1980/
/olympics/countries/AFG/summer/1972/

您应该能够使用此正则表达式检查链接是否以
/olympics/countries/AFG/summer/
开头,然后是一个数字和一个
/

foreach($link_season->find('a') as $season){
    if(preg_match('~^/olympics/countries/AFG/summer/\d+/~', $season->href)) {
         echo $link_year_season = $season->href . "\n";
         //echo $link_season = strstr ($link_year_season,'summer') . "\n";
    }
}
演示:

你也可以在夏天之后通过捕获数字来提取当前年份(假设那是一年,第一个正则表达式只检查数字,这一个更严格)


如果季节也可能不同,您可以执行
(?:summer | winter)
,这将允许
summer
winter
成为第四个目录。

您应该能够使用此正则表达式检查链接是否以
/olympics/countries/AFG/summer/
开头,然后是一个数字和一个
//code>

foreach($link_season->find('a') as $season){
    if(preg_match('~^/olympics/countries/AFG/summer/\d+/~', $season->href)) {
         echo $link_year_season = $season->href . "\n";
         //echo $link_season = strstr ($link_year_season,'summer') . "\n";
    }
}
演示:

你也可以在夏天之后通过捕获数字来提取当前年份(假设那是一年,第一个正则表达式只检查数字,这一个更严格)


如果季节也不同,你可以做
(?:夏季|冬季)
这将允许
summer
winter
成为第四个目录。

实现这一点的快速方法是对您已经获得的输出应用
preg\u match
strpos
或类似的内容。下面的答案是否解决了您的问题?一个快速的方法是在您已经得到的输出上应用
preg_match
strpos
或类似的东西。下面的答案是否解决了您的问题?如果你想考虑到任何国家和任何季节,你可以做
^\/olympics\/countries\/[A-Z]+\/(?:summer | winter)\/\d{4}\/
,假设夏季和冬季是奥运会举办的唯一季节;)如果你想考虑到任何国家和任何季节,你可以做
^\/olympics\/countries\/[A-Z]+\/(?:summer | winter)\/\d{4}\/
,假设夏季和冬季是奥运会举办的唯一季节;)