2009-11-01 65 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