извлечь URL из строки, отличной от href

Я заменяю URL YouTube с YouTube видео с помощью JWPlayer.

$str='<a  href="https://www.youtube.com/watch?v=6anwsDt8AhA"> sometext</a>https://www.youtube.com/watch?v=6anwsDt8AhAApr 19, 2015 - Uploaded by Go FreelancerThis feature is not available right now. Please try again later. Published on Apr 19, 2015. How to get anchor ...How to get anchor text/href on click using jQuery? - YouTube Video for get text from html content jquery other than anchor  4:54 https://www.youtube.com/watch?v=6anwsDt8AhA Apr 19, 2015 - Uploaded by Go Freelancer This feature is not available right now. Please try again later. Published on Apr 19, 2015. How to get anchor ...';//  $disp_question_desc=$content;
$disp_question_desc=str_replace("http", " http", $str);
//get list of youtube urls
preg_match_all('#\b(?:http(?:s)?:\/\/)?(?:www\.)??(?:youtu\.be\/|youtube\.com\/)[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $disp_question_desc, $urls);
if(!empty($urls[0]))
{

foreach($urls[0] as $key=> $youtubeurl)
{
$div_id=$div_container."_".$key;
$youtubeurl=str_replace("/","\/",$youtubeurl);
$youtubeurl=str_replace("?","\?",$youtubeurl);
$youtube_content= "<div class='youtube-videos-container' srcval='".$youtubeurl."'><div class='youtube-videos  ".$div_id."' id='".$div_id."' ></div></div>";
$disp_question_desc= preg_replace( "/".$youtubeurl."/", $youtube_content,$disp_question_desc,1);
$youtubeurl=str_replace("\\","",$youtubeurl);

if (!preg_match("~^(?:f|ht)tps?://~i", $youtubeurl)) {
$youtubeurl = "https://" . $youtubeurl;
}}

echo $disp_question_desc;}

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

вывод $ urls [0]:

Array
(
[0] => https://www.youtube.com/watch?v=6anwsDt8AhA
[1] => https://www.youtube.com/watch?v=6anwsDt8AhAApr
[2] => https://www.youtube.com/watch?v=6anwsDt8AhA
)

1

Решение

Я собираюсь пойти по прихоти и попытаться исправить ваше первое регулярное выражение.

Измените регулярное выражение для замены на приведенное ниже, которое соответствует только URL-адресам YouTube, не содержащимся в HTML-тегах.

(?<!\")((http:\/\/|https:\/\/)(www.)?(youtube\.com|youtu\.be)\/(watch\?v=|\?v=)([a-zA-Z0-9]+))+(?!\")

Если это не работает, отправьте ответ, и я рассмотрю ваш код дальше.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]