正则表达式从URL和带www创建链接

时间:2012-01-26 17:19:14

标签: php regex

我有一个PHP函数,它接受传递的url并创建一个干净的链接。它将完整链接放在锚标记中,并从网址中显示“www.domain.com”。它运作良好但我想修改它,因此它删除了“www。”。部分也是如此。

<?php
    // pass a url like: http://www.yelp.com/biz/my-business-name
    // should return: <a href="http://www.yelp.com/biz/my-business-name">yelp.com</a>
    function formatURL($url, $target=FALSE) {
        if ($target) { $anchor_tag = "<a href=\"\\0\" target=\"$target\">\\4</a>"; }
        else { $anchor_tag = "<a href=\"\\0\">\\4</a>"; }
        $return_link = preg_replace("`(http|ftp)+(s)?:(//)((\w|\.|\-|_)+)(/)?(\S+)?`i", $anchor_tag, $url);
        return $return_link;
    }
?>

我的正则表达能力并不强,所以任何帮助都非常感激。

2 个答案:

答案 0 :(得分:4)

看看parse_url:http://us2.php.net/manual/en/function.parse-url.php

这将简化您的逻辑,可以更换www。一个简单的字符串替换。

$link = 'http://www.yelp.com/biz/my-business-name';
$hostname = parse_url($link, PHP_URL_HOST));
if(strpos($hostname, 'www.') === 0)
{
   $hostname = substr($hostname, 4);
}

我已修改原始答案,以便在评论中说明问题。下面帖子中的preg_replace也可以工作,并且更加简洁,我将在这里留下这个,以显示一个替代解决方案,如果你愿意,不需要调用正则表达式引擎。

答案 1 :(得分:2)

这将使您的域名减去www

$url = preg_replace('/^www./', '', parse_url($url, PHP_URL_HOST));
正则表达式中的

^表示只从字符串的开头删除www

工作示例:http://codepad.org/FTNikw8g