2011-10-26 24 views
2

我目前正试图从嵌入网址YouTube提供的YouTube视频中提取ID。使用子字符串拉取YouTube视频的视频ID

我目前正在使用这个作为一个例子:

<iframe width="560" height="315" src="http://www.youtube.com/embed/aSVpBqOsC7o" frameborder="0" allowfullscreen></iframe> 

到目前为止,我的代码,目前看起来是这样的,

else if (TB_VideoLink.Text.Trim().Contains("http://www.youtube.com/embed/")) 
     { 
      youtube_url = TB_VideoLink.Text.Trim(); 
      int Count = youtube_url.IndexOf("/embed/", 7); 
      string cutid = youtube_url.Substring(Count,youtube_url.IndexOf("\" frameborder")); 

      LB_VideoCodeLink.Text = cutid; 
     } 

我似乎到那里,但是代码翻倒在CutID我不知道为什么?

Cheers

+1

为什么子串?你真的需要Regex在这里。 – Oliver

+0

正则表达式将是一个更简洁的解决方案@Oliver,如果你展示一个例子,我会对它进行评分。 – tonycoupland

回答

7

我总是发现使用正则表达式这种事情要容易得多,SubstringIndexOf总是对我有用,但这只是我个人的看法。

这是我将如何解决这个问题。

Regex regexPattern = new Regex(@"src=\""\S+/embed/(?<videoId>\w+)"); 
Match videoIdMatch = regexPattern.Match(TB_VideoLink.Text); 

if (videoIdMatch.Success) 
{ 
    LB_VideoCodeLink.Text = videoIdMatch.Groups["videoId"].Value; 
} 

这将执行正则表达式匹配,定位SRC =”,忽略所有的字符,直到/嵌入/然后提取毕竟这字字符作为一个命名组。

然后,您可以得到这个命名组的值。其优点是,如果FRAMEBORDER不将src后直接发生这样甚至会工作。

希望这是有用的,

卢克

+0

这似乎对我更好 ref:http://codesnippets.fesslersoft.de/get-the-youtube-videoid - 从-URL / – visual

2

Substring方法的第二个参数是长度而不是第二个索引。从第一个测试中减去第二个测试的索引以获得所需的长度。

else if (TB_VideoLink.Text.Trim().Contains("http://www.youtube.com/embed/")) 
    { 
     youtube_url = TB_VideoLink.Text.Trim(); 
     // Find the start of the embed code 
     int Count = youtube_url.IndexOf("/embed/", 7); 
     // From the start of the embed bit, search for the next " 
     int endIndex = youtube_url.IndexOf("\"", Count); 
     // The ID is from the 'Count' variable, for the next (endIndex-Count) characters 
     string cutid = youtube_url.Substring(Count, endIndex - Count); 

     LB_VideoCodeLink.Text = cutid; 
    } 

你或许应该有更多的异常处理当两个测试字符串是不存在的。

+0

您将如何处理此嵌入代码:'iframe width =“560”height =“315”frameborder =“0”allowfullscreen src =“http://www.youtube.com/embed/aSVpBqOsC7o”>​​' –

+1

搜索从嵌入位开始到下一个“。我会更新我的例子... – tonycoupland

0

与上面的答案类似,但被殴打。doh

  //Regex with YouTube Url and Group() any Word character a-z0-9 and expect 1 or more characters + 
     var youTubeIdRegex = new Regex(@"http://www.youtube.com/embed/(?<videoId>\w+)",RegexOptions.IgnoreCase|RegexOptions.Compiled); 

     var youTubeUrl = TB_VideoLink.Text.Trim(); 

     var match = youTubeIdRegex.Match(youTubeUrl); 
     var youTubeId = match.Groups["videoId"].Value; //Group[1] is (\w+) -- first group() 

     LB_VideoCodeLink.Text = youTubeId;