2016-07-13 5 views
0

So habe ich diese RegexErhalten ganzen url ohne voreingestellte Parameter

/(http|https):\/\/www\.youtube\.com\/watch\?v=(\w+)/i 

Aber das Problem einen YouTube-Link für immer ist, dass es nicht das Ende der Verbindung von so etwas wie diese abholen:

https://www.youtube.com/watch?v=videoID&sdfgsdfgsdfg;jsfdg;lkjsdf;gkj

Es nimmt https://www.youtube.com/watch?v=videoID und verlässt &sdfgsdfgsdfg;jsfdg;lkjsdf;gkj allein. Ich möchte, dass es die ganze Zeichenfolge aufnimmt, während die Video-ID extrahiert wird.

+2

Was "Sie bedeuten hebe die ganze Schnur auf "? 'v = (\ w +). *'? – TessellatingHeckler

+0

Es stoppt wahrscheinlich bei '&', weil das nicht von '\ w' –

+0

@TessellatingHeckler passt, danke, aber ich suche nach etwas, wo es aufhören wird, nach einem Match zu suchen, nachdem es ein Leerzeichen findet. Wenn ich das benutze, kann ich die URL + einen ganzen Absatz danach haben und es wird die ganze Sache in das Video hineinpassen. –

Antwort

0

Versuchen Sie, diese

/https?:\/\/www\.youtube\.com\/watch\?.*?&?v=(\w+)(?:&[^\s]+)?/i 
  • https? die gleiche wie (?:http|https) ist, können Sie nicht sagen, dass Sie das Protokoll
  • /watch\? ...
    • .*? zu erfassen benötigt - Verbrauchen alle zusätzlichen Abfrageparameter
    • &? - Wenn andere Abfrage paramters sind, dann wird es ein &
    • v=(\w+)(?:&[^\s]+)? - Capture the VideoID und bis der Rest der URL optional auf Leerzeichen
+0

Leider erfasst das mehr als den Rest der URL. Ich möchte in der Lage sein, lesbaren Text nach der URL zu haben und die Übereinstimmung nimmt alles auf, auch wenn dort ein Platz ist (wahrscheinlich wegen der Verwendung des Zeitraums) –

+1

Siehe Bearbeiten. https://regex101.com/r/nQ4yD0/1 –