2013-06-20 14 views
0

내가 PHP에서 새로운 오전 발견하고 나는 BBCode를 만들려고했지만 그것은 나에게이 오류 제공 : 내가 한preg_replace이다() : 없음 종료 구분 기호 '@'

Warning: preg_replace(): No ending delimiter '@' found

코드 :

function bbCode($str){ 
    $values = array(
        '@\[b]\(.*?)\[\/b]\@i' => '<b>$1</b>', 
        '@\[i]\(.*?)\[\/i]\@i' => '<em>$1</em>' 

        ); 
        return preg_replace(array_keys($values), array_values($values), $str); 
} 

무엇이 문제입니까?

+0

'@ \ [\ B] \ [/ B \] i'가 – Lake

+0

당신이'@'와'사이의 차이를 아십니까 작품을해야 @ \ @'? –

답변

0

\@을 사용하여 마지막으로 @ 심볼을 이스케이프 처리하므로 php는 @을 구분 문자가 아닌 리터럴로 해석합니다.

편집 : (.? *)

function bbCode($str) 
{ 
    $values = array(
     '@\[b\](.*?)\[\/b\]@i' => '<b>$1</b>', 
     '@\[i\](.*?)\[\/i\]@i' => '<em>$1</em>' 

    ); 
    return preg_replace(array_keys($values), array_values($values), $str); 
} 
+0

이렇게하면 다른 오류가 발생합니다. preg_replace() : 컴파일 실패 : 일치하지 않는 괄호 –

+0

내 수정 된 솔루션을 시도하십시오. – Novocaine

+1

[문서화되지 않았습니다] (http://es1.php.net/preg_replace) : *'pattern' - 검색 할 패턴. 문자열이거나 문자열이있는 배열 일 수 있습니다. * –