PHP匹配URL并使用preg_replace_callback()

时间:2013-03-27 02:33:19

标签: php regex preg-replace preg-replace-callback

我使用以下内容查找$ content

中的所有网址
 $content = preg_match_all( '/(http[s]?:[^\s]*)/i', $content, $links );

但这取决于http://中的http://www.google.com/some/path部分。

我的问题是:

1 - 我如何修改它以便同时点击仅以www开头的链接,例如www.google.com

2 - 主要目的是找到链接,并用从另一个函数返回的值替换它们。我试过preg_match_callback(),但是它没有用(可能用错了..

$content = preg_replace_callback(
           "/(http[s]?:[^\s]*)/i",
            "my_callback",
            $content);

function my_callback(){

// do a lot of stuff independently of preg_replace
// adding to =.output...

return $output;
}

现在,在我的逻辑中(这可能是错误的)$content的所有匹配都将被$output取代。我做错了什么?

(请不要匿名函数 - 我在旧服务器上测试)

编辑我 - 在评论之后,尝试澄清更多细节

function o99_simple_parse($content){

$content = preg_replace_callback( '/(http[s]?:[^\s]*)/i', 'o99_simple_callback', $content );


return $content;
}

回调:

function o99_simple_callback($url){
    // how to get the URL which is actually the match? and width ??
        $url = esc_url_raw( $link );
        $url_name = parse_url($url); 
        $url_name = $description = $url_name['host'];// get rid of http://..
        $url = 'http://something' .  urlencode($url)   . '?w=' . $width ; 
        return $url; // what i really need to replace 
    }

1 个答案:

答案 0 :(得分:2)

要修改您必须允许以www开头的网址的正则表达式,您只需写下:

/((http[s]?:|www[.])[^\s]*)/i
  +         ++++++++