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];
}