테스트 사이트 - 개발 중인 베타 버전입니다

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

sinbi 6년 전 조회 2,482

 

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개

채택된 답변
+20 포인트
6년 전

</p>

<p>function conv_mw_youtube($matches) {

    global $q;

    mw_youtube($matches[1], $q);

}</p>

<p>function conv_mw_vimeo($matches) {

    global $q;

    mw_vimeo($matches[1], $q);

}</p>

<p>function mw_youtube_content($content, $q='')

{

    $pt = mw_youtube_pattern($content);

    if ($pt) 

          $content = preg_replace_callback($pt, 'conv_mw_youtube', $content);    </p>

<p>    $pt = mw_vimeo_pattern($content);  

    if ($pt)

        $content = preg_replace_callback($pt, 'conv_mw_vimeo', $content);</p>

<p>    return mw_video_wrapper($content);

}</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

s
sinbi
6년 전
슈와이 님 감사합니다. ^^*
최대 난관에 봉착해 작업을 못 하고 붕 떠있었는데...
s
sinbi
6년 전
슈와이 님
위 코드를 넣으니까, 또 아래 코드에서 동일한 에러가... ^^;;;;
/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;
}

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

s
sinbi Expert
6년 전

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

 

</p>

<p> </p>

<p>if (!$mw_basic['cf_zzal']) {

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

<p>    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']);</p>

<p>} else {

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

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

}</p>

<p>//$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']);</p>

<p> </p>

<p>

 

 

 

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

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

로그인 후 평가할 수 있습니다

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

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

로그인