C # regex, um die Video-ID von YouTube und Vimeo per URL zu erhalten

Ich bin gerade damit beschäftigt, zwei reguläre Ausdrücke zu erstellen, um die ID von YouTube- und Vimeo-Videos zu filtern. Ich habe bereits folgende Ausdrücke:

YouTube: (youtube\.com/)(.*)v=([a-zA-Z0-9-_]+)
Vimeo: vimeo\.com/([0-9]+)$

Wie ich unten erklärt habe, gibt es 2 Arten von URLs, die mit den regulären Ausdrücken übereinstimmen, die ich bereits erstellt habe. Einige andere Arten von URLs von Vimeo und YouTube werden von den Ausdrücken nicht abgedeckt. Was ich am meisten bevorzuge, ist, dass all dies in zwei Ausdrücken behandelt werden kann. Eines für alle Vimeo-Videos und eines für alle YouTube-Videos. Ich habe mit verschiedenen Ausdrücken experimentiert, aber bisher keine Erfolge erzielt. Ich versuche immer noch, reguläre Ausdrücke zu beherrschen, also hoffe ich, dass ich auf dem richtigen Weg bin und jemand mir helfen kann! Wenn Sie weitere Informationen benötigen, lassen Sie es mich bitte wissen!

VIMEO URLs NICHT ZUSAMMENGESTIMMT:

http://vimeo.com/channels/hd#11384488
http://vimeo.com/groups/brooklynbands/videos/7906210
http://vimeo.com/staffpicks#13561592

YOUTUBE URLs NICHT PASSEND

http://www.youtube.com/user/username#p/a/u/1/bpJQZm_hkTE
http://www.youtube.com/v/bpJQZm_hkTE
http://youtu.be/bpJQZm_hkTE

URLs Matched

http://www.youtube.com/watch?v=bWTyFIYPtYU&feature=popular
http://vimeo.com/834881

Die Idee ist, alle oben genannten URLs mit zwei regulären Ausdrücken abzugleichen. Eine für vimeo und eine für youtube.

UPDATE NACH ANTWORT Sedith:

So sehen meine Ausdrücke jetzt aus

public static readonly Regex VimeoVideoRegex = new Regex(@"vimeo\.com/(?:.*#|.*/videos/)?([0-9]+)", RegexOptions.IgnoreCase | RegexOptions.Multiline);
public static readonly Regex YoutubeVideoRegex = new Regex(@"youtu(?:\.be|be\.com)/(?:(.*)v(/|=)|(.*/)?)([a-zA-Z0-9-_]+)", RegexOptions.IgnoreCase);

nd im Code habe ich

var youtubeMatch = url.match(YoutubeVideoRegex );
var vimeoMatch = url.match(VimeoVideoRegex );

var youtubeIndex = (youtubeMatch.length - 1)
var youtubeId = youtubeMatch[youtubeIndex];

Wie Sie sehen können, muss ich jetzt den Index finden, in dem sich die videoId im Array mit Übereinstimmungen befindet, die vom regulären Ausdruck zurückgegeben werden. Aber ich möchte, dass es nur die ID selbst zurückgibt, damit ich den Code nicht ändern muss, wenn YouTube von Vimeo jemals beschließt, die URLs zu ändern. Irgendwelche Tipps dazu?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage