这就是我想要做的事情:
$line = 'blabla translate("test") blabla';
$line = preg_replace("/(.*?)translate\((.*?)\)(.*?)/","$1".translate("$2")."$3",$line);
所以结果应该是翻译(“test”)被“test”的翻译所取代。
问题是translate(“$ 2”)将字符串“$ 2”传递给translate函数。所以translate()尝试翻译“$ 2”而不是“test”。
有没有办法在替换之前将匹配值传递给函数?
答案 0 :(得分:6)
preg_replace_callback是你的朋友
function translate($m) {
$x = process $m[1];
return $x;
}
$line = preg_replace_callback("/translate\((.*?)\)/", 'translate', $line);
答案 1 :(得分:0)
您可以将preg_replace_callback函数用作:
$line = 'blabla translate("test") blabla';
$line = preg_replace_callback("/(.*?)translate\((.*?)\)(.*?)/",fun,$line);
function fun($matches) {
return $matches[1].translate($matches[2]).$matches[3];
}