2012-01-14 8 views
0

preg_replace에 문제가있어 올바른 기능을 사용하고 있는지 잘 모르겠습니다.preg_replace 일치 항목 만 일치

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

1

& 그것 뿐이다 \w의 일부가 아닙니다. 나는 대신 \S (공백이 아님)으로 갈 것입니다.

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

편집 : (. *) 오타 + 백 슬래시

당신이 당신의 가치 역 참조를 사용할 수있는 경우

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

에 당신은 WWW를 얻기 위해 \\ 1을 사용할 수 있습니다. (\ w +)

에 의해 캐치하는 값을 얻으려면 \\ 2 또는 원하는 값이 아닐까요?

+0

사실 나는 정규식이 좋지 않습니다. 나는 다른 비디오 웹 사이트에 대한 긴 목록을 가지고있다. 예 : youtube : '#http : // (www \.)? youtube \ .com/watch \? v = ([^ & \ n] +) (&. *? (\ n | \ s) ?) # 내가 '내가 findout 수 없습니다 가 어떻게 유튜브 링크의 나머지 부분을 무시할 수 – Mertafor

+0

나는 그것을 할 수있는 말은 뭔가 같은 : '일부 단어 http://www.youtube.com/v?2413&feature= 1 다른 단어들 ' 그냥 일치하지 않는 부분을 무시하고 싶습니다 – Mertafor