Regex PHP – автоматическое определение YouTube, изображений и «регулярных» ссылок

Я хочу сделать так, чтобы в моем чате-приложении ссылки на веб-сайты можно было кликать, а ссылки на YouTube и изображения автоматически вставлялись.

Я сделал этот код в Java для моего клиента WebIRC, но теперь я пытаюсь сделать его в PHP и JavaScript.

Я еще не знаком с PHP, поэтому не знаю, как много использовать regex. Интересно, может ли какая-то душа помочь мне с этим …

Для 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); } 

Solutions Collecting From Web of "Regex PHP – автоматическое определение YouTube, изображений и «регулярных» ссылок"

Вот решение, которое я придумал:

 $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)