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

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

QA

정규표현식 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


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);
}

슈와이 님
위 코드를 넣으니까, 또 아래 코드에서 동일한 에러가... ^^;;;;
/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;
}

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

 


 
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);
}

답변을 작성하시기 전에 로그인 해주세요.
전체 123,636 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT