2010-02-08 126 views
6

在一個系統,我發展我需要認識到的格式如下註冊EXP YouTube的鏈接

[YouTube的] YouTube網址[/ YouTube的]

YouTube的鏈接,那一刻我來到這個正則表達式:

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

但這種模式是無法識別的網址像

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

注意特徵= fvst

有人可以幫助我認識到所有可能的YouTube網址嗎?

+1

相關: HTTP:// stackover flow.com/questions/1658763/php-regex-youtube,http://stackoverflow.com/questions/1773822/get-youtube-video-id-from-html-code-with-php - 請參閱http:// stackoverflow .com/search?q = youtube + regex – Gordon 2010-02-08 10:11:46

回答

4

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

編輯如何:改變了正則表達式只保留視頻ID括號內。

+0

如果兩個「youtube-links」在同一行,那麼貪婪的'。*'會搞砸了。我會在Andy之後提出一個不願意的'?',(**編輯:**現在已經刪除了他的答案......)。 – 2010-02-08 10:13:35

+0

哦,是的,沒錯。我看到它在時間上,雖然:) – 2010-02-08 10:14:54

+0

沒有蒂姆,你失敗了:我看到你有'。*'沒有'?'!有罪的收費! :) +1 – 2010-02-08 10:16:51

1

注:
我上的URL執行不區分大小寫匹配(/ I)
。匹配任何東西使用 \。而是要匹配網址
此外,「www。」在YouTube網址是可選的。
使用(\。[AZ] +){1,2},而不是 「*」,以匹配 「.COM」, 「.co.uk」,...之後 「YouTube」 的

假設「&特徵」部分是可選的,正則表達式是:

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

假設‘&功能’部分是可選的,並且可以有其他的參數不是‘功能’:

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