2012-01-14 76 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