警告:输入中出现意外字符:'\'(ASCII = 92)state = 1

时间:2014-06-03 12:16:41

标签: php regex

我收到以下错误消息:

Warning: Unexpected character in input: '\' (ASCII=92) state=1

这就是让我遇到麻烦的代码。

$tag_value = preg_replace('/\{(.*?)\}/e', '$values[\\1]', $tag_value);

我使用的是PHP 5.2.9,升级不是一种选择。

正则表达不是我的专长,我无法独自解决这个问题。任何帮助将不胜感激。

1 个答案:

答案 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不是放在括号内的正确东西。