2013-10-23 14 views
1
$string = preg_replace("_\[soundcloud\]/http:\/\/soundcloud.com\/(.*)/\[/soundcloud\]_is", "<iframe width=\"100%\" height=\"166\" scrolling=\"no\" frameborder=\"no\" src=\"https://w.soundcloud.com/player/?url=\$0\"></iframe>", $string); 

안녕하세요 다시 한번 Stackoverflow!Soundcloud PHP ubb 파서

나는 위의 preg_replace를 사용하여

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url= (url) "></iframe> 



[soundcloud](url)[/soundcloud]

를 분석하여, 사운드 클라우드 링크를 지원하기 위해 내 UBB 파서 싶지만,이 작동하지 않습니다.

내 정규 표현식에 문제가있는 사람을 도와 줄 수 있습니까?

미리 감사드립니다.

답변

2

패턴이 잘 벗어나지 않습니다.

  1. 당신이 / 아닌 구분 기호를 사용하기 때문에, 당신은 모든 슬래시를 이스케이프 할 필요가 없습니다. 그리고 대괄호를 닫으면 이스케이프 할 필요가 없습니다 :

    ~\[soundcloud]http://soundcloud.com/(.*)/\[/soundcloud]~is

  2. 당신이 욕심 한정사 *를 사용하는 URL을 캡처하려면. 캡처가 마지막 닫기 태그에서 중지되기 때문에 문자열에 [soundcloud] 태그가 두 개 이상있는 경우 문제가 발생합니다.

    ~\[soundcloud]http://soundcloud.com/(.*?)/\[/soundcloud]~is

    당신은 너무이 시도 할 수 있습니다 :이 문제를 해결하려면 게으른 한정사 *?을 사용할 수 있습니다

    ~\[soundcloud]http://soundcloud.com/([^/]+)/\[/soundcloud]~i

  3. 캡처 첫 번째 캡처 그룹입니다. 그렇다면 그의 참조는 $1이 아니며 전체 일치 부분은 $0이 아닙니다.

    '<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=$1"></iframe>'

+0

이 (~ \ [사운드 클라우드] https://soundcloud.com'그것을 해결 : 교체 문자열을

  • 는 내부의 모든 따옴표 탈출을 방지하기 위해 간단한 견적을 사용 . *?) \ [/ soundcloud] ~ is &''. 도와 주셔서 감사합니다! – Thew