我收到以下错误消息:
Warning: Unexpected character in input: '\' (ASCII=92) state=1
这就是让我遇到麻烦的代码。
$tag_value = preg_replace('/\{(.*?)\}/e', '$values[\\1]', $tag_value);
我使用的是PHP 5.2.9,升级不是一种选择。
正则表达不是我的专长,我无法独自解决这个问题。任何帮助将不胜感激。
答案 0 :(得分:5)
使用简单的preg_replace
无法完成此操作,因为数组取消引用未使用/e
修饰符完成。相反,您可以使用preg_replace_callback
函数:
$tag_value = preg_replace_callback("/\{(.*?)\}/", function($m) use($values){
return $values[$m[1]];
}, $tag_value);
这绝对适用于php 5.3,但是在5.2中你可能需要明确定义回调函数:
function replace($m) {
global $values;
return $values[$m[1]];
}
$tag_value = preg_replace_callback("/\{(.*?)\}/", "replace", $tag_value);
编辑:您看到的错误正在发生,因为使用原始代码时,您的替换将被视为$values[\1]
(在取消反斜杠之后 - 在此字符串中{{1不是放在括号内的正确东西。