自定义正则表达式以正确附加URL

时间:2013-12-13 09:25:48

标签: php regex

我正在尝试从页面源获取图像网址。这是我的正则表达式

<?php       

$url='http://www.biznessapps.com';    
$data = file_get_contents($url);        
$logo = get_logo($data);    
echo $logo;    
function get_logo($html)     
{    
    //preg_match_all('', $html, $matches);
    //preg_match_all('~\b((\w+ps?://)?\S+(png|jpg))\b~im', $html, $matches);
    if(preg_match_all('/\bhttps?:\/\/\S+(?:png|jpg)\b/', $html, $matches))
    {  
        echo "First";                   
        return $matches[0][0];
    }
    else
    { 
        if(preg_match_all('~\b((\w+ps?://)?\S+(png|jpg))\b~im', $html, $matches))
        {  
            echo "Second";
            return $matches[0][0];
        }
        else
            return null;
    }    
}    
?>

对于某些网址:http://www.biznessapps.com正则表达式给出结果/frontend/images/logo.png。这是图像网址的子文件夹路径。

我应该使用什么验证,以便如果有图像的子文件夹路径,它应该转换为绝对图像网址,http://www.biznessapps.com/frontend/images/logo.png用于上述情况。

对于某些情况,用户输入的网址类似于http://www.biznessapps.com/,因此如果我直接将/frontend/images/logo.png附加到主网址,则转换为http://www.biznessapps.com//frontend/images/logo.png,这又是错误的。

有人建议改变正则表达式以摆脱这种情况吗?

1 个答案:

答案 0 :(得分:1)

  

我应该使用什么验证,以便如果有图像的子文件夹路径,它应该转换为绝对图像网址

您想使用UrlToAbsolute php库将相对网址转换为绝对网址。

以下是示例代码:

require('url_to_absolute.php');
echo url_to_absolute('http://www.biznessapps.com/', '/frontend/images/logo.png');
  

url_to_absolute:失败时返回false,否则返回绝对网址。如果 $ relativeUrl 是有效的绝对网址,则会返回该网址而不做任何修改。