2010-02-08 70 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