2012-01-14 62 views
0

我遇到了preg_replace问题,我不确定我是否使用了正确的函数。preg_replace只得到匹配

我是下面的usign功能,以便将youtube链接更改为youtube嵌入视频。但我无法找到我如何才能找到匹配的部分,并删除其余部分?

我的意思是比如:

http://www.vimeo.com/3124234&feature=1&v=1

当我使用这个功能,它的变化匹配的部分嵌入代码

。但我无法取消“& feature = 1”部分。

我应该使用preg_replace为那个或任何其他功能可以做我想要的?

干杯

function convert_videos($string) { 
    $rules = array(
'#http://(www\.)?vimeo\.com/(\w+)?#i' => '<object width="450" height="320" data="http://vimeo.com/moogaloop.swf?clip_id=$2&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1"></object>' 
    ); 

    foreach ($rules as $link => $player) 
     $string = preg_replace($link, $player, $string); 


    return $string; 
} 

回答

0

您的模式不匹配整个字符串,preg_replace只会替换您的模式匹配的内容。你可以用这个模式代替:

'#^http://(www\.)?vimeo\.com/(\w+)(&.*)?$#i' 
+0

只是工作太棒了!谢谢 – Mertafor 2012-01-14 19:56:28

1

&不是\w这是它的一部分。我会用\S(而不是空格)代替。

#http://(www\.)?vimeo\.com/(\S+)?#i 
0

编辑:(。*)错字+反斜杠

您可以使用反向引用了你的价值观 你的情况

#http://(www\.)?vimeo\.com/(\w+)?#i 

您可以使用\\ 1用于获取WWW。和\\ 2为获取您所捕获的值(\ w +)

或者这是不是你想要的?

+0

其实我不擅长正则表达式。我有很长的名单为不同的视频网站。例如youtube: '#http://(www \。)?youtube \ .com/watch \?v =([^&\ n] +)(&。*?(\ n | \ s) ?)我“ 我不能findout我怎么能忽略Youtube链接的其他 – Mertafor 2012-01-14 19:47:39

+0

我的意思是它可能是这样的: ”有些话http://www.youtube.com/v?2413&feature= 1一些其他的词' 我只想忽略无与伦比的部分 – Mertafor 2012-01-14 19:51:23