preg_replace在替换之前通过函数传递匹配

Mar*_*tin 2 php regex preg-replace

这就是我想要做的:

$line = 'blabla translate("test") blabla';
$line = preg_replace("/(.*?)translate\((.*?)\)(.*?)/","$1".translate("$2")."$3",$line);
Run Code Online (Sandbox Code Playgroud)

因此结果应该是翻译("test")被"test"的翻译所取代.

问题是translate("$ 2")将字符串"$ 2"传递给translate函数.所以translate()尝试翻译"$ 2"而不是"test".

有没有办法在替换之前将匹配的值传递给函数?

use*_*291 6

preg_replace_callback是你的朋友

  function translate($m) {
     $x = process $m[1];
     return $x;
  }

  $line = preg_replace_callback("/translate\((.*?)\)/", 'translate', $line);
Run Code Online (Sandbox Code Playgroud)