preg_match_all返回错误未定义的偏移量

时间:2013-02-28 07:04:47

标签: php regex preg-match-all

我正在使用preg_match_all并返回此错误:

Notice: Undefined offset: 0 in B:\xampp\htdocs\fogsy\link_searcher.php on line 98

这是第98行:

$server_name=$matches[0][1]."/";

这是我的功能: 它用于从html正文中检索链接。

    function GetLinks($body_str,$parent_url)
        {           
            $url_list=array();

            preg_match_all('/http:\/\/(.*)\//iU', $parent_url, $matches, PREG_SET_ORDER);
            $server_name=$matches[0][1]."/";

            preg_match_all('/< *a.*href *= *[\'"](.*)[\'"].*>(.*)< *\/a *>/iU', $body_str, $matches, PREG_SET_ORDER);

            for($count=0;$count<count($matches);$count++)
                {
                    $text=$matches[$count][2];

                    if(strpos(strtolower($matches[$count][1]),"http://")===false&&strpos(strtolower($matches[$count][1]),"www")===false)
                    $href="http://".$server_name.trim($matches[$count][1],"/");                         
                    else $href=$matches[$count][1];                             

                    $url_list[$text."_".$count]=$href;  
                }   
            return $url_list;
        }

任何想法?

1 个答案:

答案 0 :(得分:1)

这是因为你这里没有索引0:$server_name=$matches[0][1]."/";

的print_r($匹配);并看到。

这是因为$parent_url

中没有匹配的模式

像这样改变:

if(count($matches) > 0){
    $server_name=$matches[0][1]."/";
}
else{
    $server_name="";
}

但这会影响您的其他功能,最好将格式良好的$parent_url发送到此功能。