2010-12-12 27 views
0

我正在为YouTube视频制作一个bbcode。用户可以将视频作为bbcode发布,例如[youtube] http://www.youtube.com/watch?v=ihK2pPcDSHM [/ YouTube的。接下来,它会将其转换为html代码。但不是视频,我还想显示视频的图像。所以,我不喜欢这样写道:如何在preg的正则表达式中使用substr替换

$string = preg_replace("~\[yt]http://www.youtube.com/watch\?v=(.*)\[/yt]~Uis","<img src=\"http://img.youtube.com/vi/\\1/0.jpg\" />", $string); 

它显示的图像,但是,当有人提出一个网址,如:

http://www.youtube.com/watch?v=ihK2pPcDSHM&feature=channel 

然后将图像URL成为http://img.youtube.com/vi/ihK2pPcDSHM&feature=channel1/0.jpg这不会导致有效的图像。我正在尝试将\\1更改为".substr('\\1', 0,11).",但它没有任何结果。

有没有解决这个问题的建议?谢谢!

回答

0

喜欢尝试不同的模式:

~\[yt]http://www\.youtube\.com/watch\?v=([a-z0-9-_]+).*?\[/yt]~is 
+0

感谢,但这个结果返回只有一个字母。所以图片的url变成了http://img.youtube.com/vi/l/0.jpg – 2010-12-12 17:35:16

+0

@ user539649:你确定你在做一个不区分大小写的匹配吗? – Gumbo 2010-12-12 17:39:00

+0

嗯..你是什么意思? :我只想显示图像。我在代码中做了什么错误? – 2010-12-12 17:43:01

0

只要告诉你的正则表达式来阻止第一&字符:

$string = preg_replace("~\[yt]http://www.youtube.com/watch\?v=([^\\&]*)\[/yt]~Uis","<img src=\"http://img.youtube.com/vi/\\1/0.jpg\" />", $string); 
+0

谢谢,但现在它并没有取代它。它显示了bbcode而没有替换它:( – 2010-12-12 17:38:26

+0

反斜杠的数量可能是错误的,请尝试去除'[^ \\&]'中的反斜杠。 – moeffju 2010-12-12 18:07:18