Php 更换前预更换传递匹配功能

Php 更换前预更换传递匹配功能,php,regex,preg-replace,Php,Regex,Preg Replace,这就是我想做的: $line = 'blabla translate("test") blabla'; $line = preg_replace("/(.*?)translate\((.*?)\)(.*?)/","$1".translate("$2")."$3",$line); 因此,结果应该是翻译(“test”)被翻译为“test” 问题是translate($2)将字符串“$2”传递给translate函数。因此translate()尝试转换“$2”而不是“test” 在替换之前,是否有方

这就是我想做的:

$line = 'blabla translate("test") blabla';
$line = preg_replace("/(.*?)translate\((.*?)\)(.*?)/","$1".translate("$2")."$3",$line);
因此,结果应该是翻译(“test”)被翻译为“test”

问题是translate($2)将字符串“$2”传递给translate函数。因此translate()尝试转换“$2”而不是“test”


在替换之前,是否有方法将匹配值传递给函数?

preg\u replace\u callback是您的朋友

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

  $line = preg_replace_callback("/translate\((.*?)\)/", 'translate', $line);

您可以将preg_replace_回调函数用作:

$line = 'blabla translate("test") blabla';
$line = preg_replace_callback("/(.*?)translate\((.*?)\)(.*?)/",fun,$line);

function fun($matches) {    
 return $matches[1].translate($matches[2]).$matches[3];    
}