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

Tom*_*erk 1 php regex

我收到以下错误消息:

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并且升级不是一个选项.

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

Ale*_*s G 5

您无法通过简单的方式实现此目的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不是放在括号内的正确的东西.