2016-04-27 8 views
0

以下の行にpreg_replace_callbacksを作成してもらえますか?誰かが1つのまたは2のコールバックを作成することができます場合、私は一例に従うことができます...preg_replace_callbackを作成するためのヘルプが必要です

$output = file_get_contents(vBSEO_Storage::path('html') . '/' . $tplname . '.html'); 
$output = preg_replace('#\{path:(\w+)\}#ei', 'vBSEO_Storage::path("$1")', $output); 
$output = preg_replace('#\{opt:(\w+)\[(.*?)\]\}#ei', 'htmlspecialchars(vBSEO_Storage::setting("$1","$2"))', $output); 
$output = preg_replace('#\{opt:(\w+)\}#ei', 'vBSEO_Storage::setting("$1")', $output); 
$output = preg_replace('#\{lang_esc:([\w\_]+)\}#ei', 'addslashes(vBSEO_CP::lang("$1"))', $output); 
$output = preg_replace('#\{lang:([\w\_]+)\}#ei', 'vBSEO_CP::lang("$1")', $output); 
$output = preg_replace('#\{var_esc:([\w\_]+)\}#ei', 'htmlspecialchars(\$vars["$1"])', $output); 
$output = preg_replace('#\{var:([\w\_]+)\}#ei', '\$vars["$1"]', $output); 
return $output; 

答えて

0

あなたは簡単に見つけることができ、どのようにpreg_replace_callback作品:

$output = '/{path:application}/sub_path/to/folder/filename.html'; 
$output = preg_replace_callback(
    '#\{path:(\w+)\}#i', 
    function($match) 
    { return '(' . join(')(', $match) . ')'; 
    }, 
    $output 
); 
echo $output; 

// output: /({path:application})(application)/sub_path/to/folder/filename.html 

コールバック関数への引数は、配列(コールあたり発生)マッチしたパターンです。中カッコでサブパターンを指定することができるので、配列はフィールド0に一致する文字列全体を保持し、フィールド1は最初の中カッコ内のサブパターンを保持します。コールバックから希望する置換を返します。

試してみてください。PHP 7の互換性のため

$output = preg_replace_callback(
    '#\{path:(\w+)\}#i', 
    function($match) 
    { return vBSEO_Storage::path($match[1]); 
    }, 
    $output 
); 
0

は、例えば、このhttp://php.net/manual/en/function.preg-replace-callback.php

を読んで、あなたの最初にpreg_replaceは、このようなpreg_replace_callbackを書くことができます。

$output = preg_replace_callback('#\{path:(\w+)\}#ei', function($match) { 
    // $match[0] is the entire match 
    // $match[1] is $1, etc 
    return 'vBSEO_Storage::path("'. $match[1] .'")'; 
}, $output); 

しかし、なぜpreg_replaceが足りたらpreg_replace_callbackを使いたいのですか?

+0

。/eは非推奨です。返信いただきありがとうございます!私は/ e修飾子でpreg_replaceのすべてのインスタンスを修正しようとしています。 –

関連する問題