php - Regex PHP - 自动检测 YouTube、图像和 "regular"链接

标签 php regex hyperlink preg-replace

我想在我的聊天应用程序中实现网站链接可点击,并自动嵌入 YouTube 和图像链接。

我已经为我的 WebIRC 客户端用 Java 编写了这段代码,但现在我正在尝试用 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);

如果您需要我为您澄清任何事情,请告诉我。

关于php - Regex PHP - 自动检测 YouTube、图像和 "regular"链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8027023/

相关文章:

php - Codeigniter,通过变量中包含的值增加数据库值

php - 如何检测用户何时成功完成php中的文件下载

php - Javascript .getHours() 返回奇怪的结果

javascript - 正则表达式匹配大于 0 的数字,在括号内并且倒数第二个字符为字符串

php - 使用php的Mysql事件错误

c# - 正则表达式匹配和替换数学运算中的运算符

java - 从正则表达式的日志文件中解析 FIX 协议(protocol)消息?

html - 为什么我的图像超链接不起作用?

html - 仅将文本设置为链接

html - 如何创建具有相同页面链接的 MHTML 独立文件