To get the Youtube VideoId from an Url in C# and VB.NET you can use the following snippet.
It matches these 18 type of Youtube Links (Sample Data):
Sample Input
http://youtu.be/AAAAAAAAA01
http://www.youtube.com/embed/watch?feature=player_embedded&v=AAAAAAAAA02
http://www.youtube.com/embed/watch?v=AAAAAAAAA03
http://www.youtube.com/embed/v=AAAAAAAAA04
http://www.youtube.com/watch?v=AAAAAAAAA06
www.youtube.com/watch?v=AAAAAAAAA07
www.youtu.be/AAAAAAAAA08
youtu.be/AAAAAAAAA09
http://www.youtube.com/watch?feature=player_embedded&v=AAAAAAAAA05
http://www.youtube.com/watch?v=i-AAAAAAA14&feature=related
http://www.youtube.com/attribution_link?u=/watch?v=AAAAAAAAA15&feature=share&a=9QlmP1yvjcllp0h3l0NwuA
http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&u=/watch?v=AAAAAAAAA16&feature=em-uploademail
http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&feature=em-uploademail&u=/watch?v=AAAAAAAAA17
http://www.youtube.com/v/A-AAAAAAA18?fs=1&rel=0
youtube.com/watch?v=AAAAAAAAA10
http://www.youtube.com/watch/AAAAAAAAA11
http://www.youtube.com/v/AAAAAAAAA12
http://www.youtube.com/v/AAAAAAAAA13
Sample C#
using System.Linq;
using System.Text.RegularExpressions;
namespace de.fesslersoft.YoutubeRegexTest
{
internal static class Youtube
{
private const string YoutubeLinkRegex = "(?:.+?)?(?:\\/v\\/|watch\\/|\\?v=|\\&v=|youtu\\.be\\/|\\/v=|^youtu\\.be\\/)([a-zA-Z0-9_-]{11})+";
internal static string GetVideoId(string input)
{
var regex = new Regex(YoutubeLinkRegex, RegexOptions.Compiled);
foreach (Match match in regex.Matches(input))
{
//Console.WriteLine(match);
foreach (var groupdata in match.Groups.Cast<Group>().Where(groupdata => !groupdata.ToString().StartsWith("http://") && !groupdata.ToString().StartsWith("https://") && !groupdata.ToString().StartsWith("youtu") && !groupdata.ToString().StartsWith("www.")))
{
return groupdata.ToString();
}
}
return string.Empty;
}
}
}
Sample VB.NET
Imports System.Linq
Imports System.Text.RegularExpressions
Namespace de.fesslersoft.YoutubeRegexTest
Friend NotInheritable Class Youtube
Private Sub New()
End Sub
Private Const YoutubeLinkRegex As String = "(?:.+?)?(?:\/v\/|watch\/|\?v=|\&v=|youtu\.be\/|\/v=|^youtu\.be\/)([a-zA-Z0-9_-]{11})+"
Friend Shared Function GetVideoId(input As String) As String
Dim regex = New Regex(YoutubeLinkRegex, RegexOptions.Compiled)
For Each match As Match In regex.Matches(input)
For Each data As Group In match.Groups.Cast(Of Group)().Where(Function(groupdata) Not groupdata.ToString().StartsWith("http://") AndAlso Not groupdata.ToString().StartsWith("https://") AndAlso Not groupdata.ToString().StartsWith("youtu") AndAlso Not groupdata.ToString().StartsWith("www."))
Return data.ToString()
Next
Next
Return String.Empty
End Function
End Class
End Namespace
Output / Sample
var urlList = new List<String>
{
"http://youtu.be/AAAAAAAAA01",
"http://www.youtube.com/embed/watch?feature=player_embedded&v=AAAAAAAAA02",
"http://www.youtube.com/embed/watch?v=AAAAAAAAA03",
"http://www.youtube.com/embed/v=AAAAAAAAA04",
"http://www.youtube.com/watch?feature=player_embedded&v=AAAAAAAAA05",
"http://www.youtube.com/watch?v=AAAAAAAAA06",
"www.youtube.com/watch?v=AAAAAAAAA07",
"www.youtu.be/AAAAAAAAA08",
"youtu.be/AAAAAAAAA09",
"youtube.com/watch?v=AAAAAAAAA10",
"http://www.youtube.com/watch/AAAAAAAAA11",
"http://www.youtube.com/v/AAAAAAAAA12",
"http://www.youtube.com/v/AAAAAAAAA13",
"http://www.youtube.com/watch?v=i-AAAAAAA14&feature=related",
"http://www.youtube.com/attribution_link?u=/watch?v=AAAAAAAAA15&feature=share&a=9QlmP1yvjcllp0h3l0NwuA",
"http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&u=/watch?v=AAAAAAAAA16&feature=em-uploademail",
"http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&feature=em-uploademail&u=/watch?v=AAAAAAAAA17",
"http://www.youtube.com/v/A-AAAAAAA18?fs=1&rel=0"
};
foreach (var entry in urlList)
{
Console.WriteLine(Youtube.GetVideoId(entry));
}
Console.Read();
will result in the follwing output:

Youtube VideoId Regex Console Window Output
A simpler but less matching solution can be found here: How to get the VideoID of a youtube video using Regex