2009-11-01 64 views
0

我正在写一个临时PHP脚本来更新我的vBulletin论坛的MySQL数据库。PHP正则表达式和YouTube

它的功能如下。它会找到任何具有[youtube] [/ youtube]代码的条目。然后它必须将该代码替换为YouTube视频的链接。

所以,这里是什么,我要举一个例子:

$string = <<<END 
Hi everyone! Check out this video that I just found on YouTube! 

[youtube]<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Md1E_Rg4MGQ&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Md1E_Rg4MGQ&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>[/youtube] 
END; 

我不得不做出这样的看起来像这个:

[URL=http://www.youtube.com/watch/?v=Md1E_Rg4MGQ]http://www.youtube.com/watch/?v=Md1E_Rg4MGQ[/URL] 

我得到一个头痛的工作正则表达式。我没有足够的经验与正则表达式找出该怎么做。

它看起来是这样的:

$string = preg_replace("#\[youtube\]?????\[/youtube\]#i", "[URL=http://www.youtube.com/watch?v=$1]http://www.youtube.com/watch?v=$1[/URL]", $string); 

帮助请!^_^

回答

0

也许这样的事情?

$string = preg_replace('#\[youtube\].*?name="movie" value="(.*?)".*?\[/youtube\]#i', "[URL=$1]$1[/URL]", $string); 

注意,这是有限的,因为它需要一个字符串name="movie" value="????????????????"格式准确 - 在技术上,也有具有相同的含义,但不同的顺序等其他有效的HTML结构的理想的解决方案是使用某种DOM解析器来获取电影属性的值,但是如果你知道人们总是会使用确切的格式(即,如果这是从YouTube复制/粘贴总是或类似的),那么正则表达式就足够了。

+0

我明白了。谢谢 :) – stackoverflowUser001 2009-11-01 23:39:22