2016-07-08 49 views
1

我使用jwplayer替换了youtube视频的youtube网址。从字符串中提取网址然后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; 


     } 

它在正常文本中的youtube url中工作正常。的$我面临的问题,如果在href标记YouTube网址,也被更换的YouTube视频,我需要更换只剩个网址等则href标签

输出网址[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网址不在html标签。

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

如果它不工作,回来后,我会进一步检查你的代码。

+0

免责声明:仍然是相当新的正则表达式,如果这是错误的,不工作或炸毁了你的电脑,请不要downvotes – 2016-07-08 07:13:23

+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,请让我们知道。 –