我收到以下错误消息:
Warning: Unexpected character in input: '\' (ASCII=92) state=1
Run Code Online (Sandbox Code Playgroud)
这是给我这个麻烦的代码行.
$tag_value = preg_replace('/\{(.*?)\}/e', '$values[\\1]', $tag_value);
Run Code Online (Sandbox Code Playgroud)
我使用PHP 5.2.9并且升级不是一个选项.
正则表达不是我的专长,我无法自己解决这个问题.任何帮助将不胜感激.
您无法通过简单的方式实现此目的preg_replace,因为不使用/e修饰符进行数组取消引用.相反,你可以使用preg_replace_callback功能:
$tag_value = preg_replace_callback("/\{(.*?)\}/", function($m) use($values){
return $values[$m[1]];
}, $tag_value);
Run Code Online (Sandbox Code Playgroud)
这肯定适用于php 5.3,但是在5.2中你可能需要明确定义回调函数:
function replace($m) {
global $values;
return $values[$m[1]];
}
$tag_value = preg_replace_callback("/\{(.*?)\}/", "replace", $tag_value);
Run Code Online (Sandbox Code Playgroud)
编辑:您看到的错误正在发生,因为使用您的原始代码,您的替换被字面上视为$values[\1](在取消反斜杠之后 - 在此字符串中,\1不是放在括号内的正确的东西.