Regex PHP -自动检测YouTube,图像和常规"链接


Regex PHP - Auto-detect YouTube, image and "regular" links

我想让它在我的聊天应用程序,链接到网站可以点击和链接到YouTube和图像自动嵌入。

我已经在Java中为我的web客户端制作了这个代码,但现在我正试图在PHP和JavaScript中制作它。

我还不熟悉PHP,所以我不太了解如何在这里使用正则表达式。不知道有没有好心人能帮我一下……

对于YouTube-thingy,我尝试了这个,但没有成功:

if (preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v'/)[^&'n]+|(?<=v=)[^&'n]+|(?<=youtu.be/)[^&'n]+#", $message, $m)) {
    $video_id = $m[1];
    $message = preg_replace("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v'/)[^&'n]+|(?<=v=)[^&'n]+|(?<=youtu.be/)[^&'n]+#","<iframe class='embedded-video' src='http://www.youtube.com/embed/" . $video_id . "' allowfullscreen></iframe>",$message);
}

我想到了一个解决方案:

$str = 'This is an image: google.ca/images/srpr/logo3w.png
YouTube: http://www.youtube.com/watch?v=V2b8ilapFrI&feature=related
Stackoverflow:  http://stackoverflow.com/';
$str = preg_replace_callback('#(?:https?://'S+)|(?:www.'S+)|(?:'S+'.'S+)#', function($arr)
{
    if(strpos($arr[0], 'http://') !== 0)
    {
        $arr[0] = 'http://' . $arr[0];
    }
    $url = parse_url($arr[0]);
    // images
    if(preg_match('#'.(png|jpg|gif)$#', $url['path']))
    {
        return '<img src="'. $arr[0] . '" />';
    }
    // youtube
    if(in_array($url['host'], array('www.youtube.com', 'youtube.com'))
      && $url['path'] == '/watch'
      && isset($url['query']))
    {
        parse_str($url['query'], $query);
        return sprintf('<iframe class="embedded-video" src="http://www.youtube.com/embed/%s" allowfullscreen></iframe>', $query['v']);
    }
    //links
    return sprintf('<a href="%1$s">%1$s</a>', $arr[0]);
}, $str);

如果你需要我为你澄清什么,请告诉我。

当文本包含三个点...时,我对preg_replace_callback有一些问题。上面的代码将三个点识别为URL,这是不正确的。

这是我的修复,它似乎在工作的时刻$str = preg_replace_callback('#(?:https?://'S+)|(?:www.'S+)|(?:jpe?g|png|gif)#', function($arr)

这个修复在其他情况下会失败吗??

Tim Cooper的代码不能使用https链接。例:https://www.facebook.com/它将返回http://https://www.facebook.com/

代替

if(strpos($arr[0], 'http://') !== 0)

if(strpos($arr[0], 'http') !== 0)