web-dev-qa-db-ja.com

非推奨のpreg_replace / eをpreg_replace_callbackに置き換えます

$result = preg_replace(
    "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/iseU", 
    "CallFunction('\\1','\\2','\\3','\\4','\\5')",
    $result
);

上記のコードは、PHP 5.5へのアップグレード後に非推奨の警告を出します。

非推奨:preg_replace():/ e修飾子は非推奨です。代わりにpreg_replace_callbackを使用してください

コードをpreg_replace_callback()に置き換えるにはどうすればよいですか?

44
dima.h

匿名関数 を使用して、一致を関数に渡すことができます。

$result = preg_replace_callback(
    "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/isU",
    function($m) { return CallFunction($m[1], $m[2], $m[3], $m[4], $m[5]); },
    $result
);

より高速であることに加えて、これは文字列内の二重引用符も適切に処理します。 /eを使用する現在のコードは、二重引用符"\"に変換します。

66
NikiC