Php 如何在preg replace的regexp中使用substr

Php 如何在preg replace的regexp中使用substr,php,preg-replace,bbcode,substr,Php,Preg Replace,Bbcode,Substr,我正在为youtube视频制作bbcode。用户可以将视频发布为bbcode,如[youtube]http://www.youtube.com/watch?v=ihK2pPcDSHM[/youtube]。下一步,它将把它转换成html代码。但是我不想显示视频,而是想显示视频的图像。所以我是这样做的: $string = preg_replace("~\[yt]http://www.youtube.com/watch\?v=(.*)\[/yt]~Uis","<img src=\"http:/

我正在为youtube视频制作bbcode。用户可以将视频发布为bbcode,如[youtube]http://www.youtube.com/watch?v=ihK2pPcDSHM[/youtube]。下一步,它将把它转换成html代码。但是我不想显示视频,而是想显示视频的图像。所以我是这样做的:

$string = preg_replace("~\[yt]http://www.youtube.com/watch\?v=(.*)\[/yt]~Uis","<img src=\"http://img.youtube.com/vi/\\1/0.jpg\" />", $string);
然后图像url变为
http://img.youtube.com/vi/ihK2pPcDSHM&feature=channel1/0.jpg
这不会生成有效的图像。我正在尝试将
\\1
更改为
“.substr('\\1',0,11)。”
但没有任何结果


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

尝试不同的模式,如:

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

只需告诉您的正则表达式在第一个
&
字符处停止:

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

谢谢,但结果只返回了一封信。所以图像的url变成了@user539649:你确定你在进行不区分大小写的匹配吗?嗯……你是什么意思S我只是想展示一下图像。我在代码上做错了什么吗?@user539649:模式中的i修饰符应该已经执行了不区分大小写的匹配,这样
[a-z]
就可以同时匹配
a
-
z
a
-
z
。那么现在为什么它只返回视频id的一个字母而不是整个视频id呢?我应该换什么?谢谢,但现在它不能代替它。它显示bbcode而不替换它:(反斜杠的数量可能是错误的,请尝试清除
[^\\&]
中的反斜杠。
$string = preg_replace("~\[yt]http://www.youtube.com/watch\?v=([^\\&]*)\[/yt]~Uis","<img src=\"http://img.youtube.com/vi/\\1/0.jpg\" />", $string);