Regex für Youtube-Link - PHP, Regex, Youtube, Preg_match

In einem System, das ich entwickle, muss ich den Youtube-Link im folgenden Format erkennen

[youtube] youtube url [/ youtube]

für den Moment kam ich zu diesem regulären Ausdruck:

#[youtube]http://www.youtube.(.*)/watch?v=([a-zA-Z0-9_-]*)[/youtube]#s

Aber dieses Muster ist nicht in der Lage, URLs zu erkennen

[Youtube]http://www.youtube.com/watch?v=s3wXkv1VW54&feature=fvst[/youtube]

Beachten Sie das Merkmal = fvst.

Jemand kann mir helfen, alle mögliche youtube URL zu erkennen?

Antworten:

4 für die Antwort № 1

Wie wäre es mit

|[youtube]http://www.youtube.(.*?)/watch?v=([a-zA-Z0-9_-]*)[%&=#a-zA-Z0-9_-]*[/youtube]|s

BEARBEITEN: Die Regex wurde geändert, um nur die Video-ID in Klammern zu behalten.


1 für die Antwort № 2

Anmerkungen:
Ich würde eine case-insensitive Übereinstimmung mit URLs (/ i) durchführen
. passt zu allem; benutzen . stattdessen die URL zu entsprechen
Auch "www." in Youtube URLs ist optional.
Verwenden Sie (. [A-z] +) {1,2} anstelle von ". *", Um ".com", ".co.uk", .. nach "youtube" zu finden.

Unter der Annahme, dass der "& feature" -Teil optional ist, wäre die Regex:

/[youtube]http://(www.)?youtube(.[a-z]+){1,2}/watch?v=([a-z0-9_-]*)(&feature=([a-z]+))?[/youtube]/is

Angenommen, der "& feature" -Teil ist optional und AND kann andere Parameter als "feature" haben:

/[youtube]http://(www.)?youtube(.[a-z]+){1,2}/watch?v=([a-z0-9_-]*)(&([a-z]+)=([a-z0-9_-])+)*?[/youtube]/is

Speisekarte