채택완료

정규표현식 preg_replace 함수 e 수정자를 preg_replace_callback 형식으로 바꾸려면?

 

if (!$mw_basic['cf_zzal'])
    $view['rich_content'] = @preg_replace("/{이미지\:([0-9]+)[:]?([^}]*)}/ie", "mw_view_image(\$view, '\\1', '\\2')", $view['content']);
else
    $view['rich_content'] = @preg_replace("/{이미지\:([0-9]+)[:]?([^}]*)}/ie", "", $view['content']);

$view['rich_content'] = preg_replace("/{동영상\:([0-9]+)[:]?([^}]*)}/ie", "mw_view_movie(\$view, '\\1', '\\2')", $view['rich_content']);

 

 

위 정규표현식에서

e 수정자를 제거하고 preg_replace_callback 함수 형태로 변경하려면 ?

 

 

 

PS.

/bbs/view.php 파일 보니까 비슷한 코드가 있길래 그거 따라 했더니,

앞서 선언한 함수를 다시 불러올 수 없다는 에러가 뜨더라구요...

 

 

//$view['rich_content'] = preg_replace("/{이미지\:([0-9]+)[:]?([^}]*)}/ie", "view_image(\$view, '\\1', '\\2')", $view['content']);
function conv_rich_content($matches)
{
    global $view;
    return view_image($view, $matches[1], $matches[2]);
}
$view['rich_content'] = preg_replace_callback("/{이미지\:([0-9]+)[:]?([^}]*)}/i", "conv_rich_content", $view['content']);

 

 

답변 2개 / 댓글 2개

채택된 답변
+20 포인트

Copy
function conv_mw_youtube($matches) {
    global $q;
    mw_youtube($matches[1], $q);
}

function conv_mw_vimeo($matches) {
    global $q;
    mw_vimeo($matches[1], $q);
}

function mw_youtube_content($content, $q='')
{
    $pt = mw_youtube_pattern($content);
    if ($pt) 
          $content = preg_replace_callback($pt, 'conv_mw_youtube', $content);    

    $pt = mw_vimeo_pattern($content);  
    if ($pt)
        $content = preg_replace_callback($pt, 'conv_mw_vimeo', $content);

    return mw_video_wrapper($content);
}

답변에 대한 댓글 2개

슈와이 님 감사합니다. ^^*
최대 난관에 봉착해 작업을 못 하고 붕 떠있었는데...
슈와이 님
위 코드를 넣으니까, 또 아래 코드에서 동일한 에러가... ^^;;;;
/skin/board/miwit/mw.lib/mw.function.lib.php 파일
아래 배열들에 e 수정자가 들어가서 그런 것 같은데,
제거하니까 코드가 전혀 출력이 안 되네요.



function mw_youtube_pattern($content)
{
$content = stripslashes($content);
$pt = array();
$pt[] = "/\[<a href=\"(https?:\/\/youtu\.be\/[^\"]+)\"[^>]*>[^<]+<\/a>\]/ie";
$pt[] = "/\[<a href=\"(https?:\/\/www\.youtube\.com\/[^\"]+)\"[^>]*>[^<]+<\/a>\]/ie";
$pt[] = "/\[(https?:\/\/youtu\.be\/[^\]]+)\]/ie";
$pt[] = "/\[(https?:\/\/www\.youtube\.com\/[^\]]+)\]/ie";

foreach ($pt as $p) {
if (preg_match($p, $content)) {
return $p;
}
}

return false;
}


function mw_vimeo_pattern($content)
{
$pt = array();
$pt[] = "/\[(https?:\/\/vimeo\.com\/[^]]+)\]/ie";
$pt[] = "/\[<a href=\"(https?:\/\/vimeo\.com\/[^\"]+)\"[^>]+>[^<]+<\/a>\]/ie";

foreach ($pt as $p) {
if (preg_match($p, $content)) {
return $p;
}
}

return false;
}

제가 제대로 고친 게 맞는지?

 

Copy
if (!$mw_basic['cf_zzal']) {
    //$view['rich_content'] = @preg_replace("/{이미지\:([0-9]+)[:]?([^}]*)}/ie", "mw_view_image(\$view, '\\1', '\\2')", $view['content']);

    function conv_rich_content1($matches)
    {
        global $view;
        return mw_view_image($view, $matches[1], $matches[2]);
    }
    $view['rich_content'] = preg_replace_callback("/{이미지\:([0-9]+)[:]?([^}]*)}/i", "conv_rich_content1", $view['content']);

} else {
    //$view['rich_content'] = @preg_replace("/{이미지\:([0-9]+)[:]?([^}]*)}/ie", "", $view['content']);

    $view['rich_content'] = preg_replace_callback("/{이미지\:([0-9]+)[:]?([^}]*)}/i", "", $view['content']);    
}

//$view['rich_content'] = preg_replace("/{동영상\:([0-9]+)[:]?([^}]*)}/ie", "mw_view_movie(\$view, '\\1', '\\2')", $view['rich_content']);
function conv_rich_content2($matches)
{
    global $view;
    return mw_view_movie($view, $matches[1], $matches[2]);
}
$view['rich_content'] = preg_replace("/{동영상\:([0-9]+)[:]?([^}]*)}/i", "conv_rich_content2", $view['rich_content']);

 

 

 

위처럼 고치니까, 일단 해당 라인에선 에러가 안 나고, 다음 코드에서 동일 에러가 나는데...

/skin/board/miwit/mw.lib/mw.function.lib.php 파일 약 3046 라인

 

function mw_youtube_content($content, $q='')
{
    $pt = mw_youtube_pattern($content);
    if ($pt)
        $content = preg_replace($pt, "mw_youtube('\\1', '$q')", $content);

    $pt = mw_vimeo_pattern($content);
    if ($pt)
        $content = preg_replace($pt, "mw_vimeo('\\1', '$q')", $content);

    return mw_video_wrapper($content);
}

답변을 작성하려면 로그인이 필요합니다.