2016-07-08 4 views
1

Я заменяю url YouTube на youtube видео с помощью jwplayer.extract url from string other then href

$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 в обычном тексте. я столкнулся проблемы с тем, если YouTube URL в HREF тега, также она заменит Youtube видео, мне нужно заменить только URLS другой, то 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

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

Ваше решение

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

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

Если он не работает, отправлять обратно, и я буду изучать код дальше.

+0

Отказ от ответственности: Все еще достаточно новой для регулярных выражений, если это не так, не работает или взорвал ваш компьютер, пожалуйста, не стреляйте меня downvotes –

+0

не работает, я изменился, как \t \t preg_match_all (» # ((HTTP: \/\/| https: (<\ "?!).? \/\ /) (WWW) (YouTube \ .com | youtu \ .be) \/(часы \ v = | \ ? v =) ([a-zA-Z0-9] +)) + (?! \ ") # ', $ disp_question_desc, $ urls); получение одинаковых результатов –

+0

Насколько я вижу, он работает: [https://regex101.com/r/pL7iC4/1](https://regex101.com/r/pL7iC4/1) Если вы что-то значили иначе, @Naisapurushotham, дайте нам знать. –