Php 警告:输入中出现意外字符:'\';(ASCII=92)状态=1
我收到以下错误消息:Php 警告:输入中出现意外字符:'\';(ASCII=92)状态=1,php,regex,Php,Regex,我收到以下错误消息: Warning: Unexpected character in input: '\' (ASCII=92) state=1 这是给我带来麻烦的一行代码 $tag_value = preg_replace('/\{(.*?)\}/e', '$values[\\1]', $tag_value); 我使用的是PHP5.2.9,升级不是一个选项 正则表达式不是我的专长,我无法独自解决这个问题。任何帮助都将不胜感激。您无法通过简单的预替换来完成此操作,因为数组反引用不是通过/e
Warning: Unexpected character in input: '\' (ASCII=92) state=1
这是给我带来麻烦的一行代码
$tag_value = preg_replace('/\{(.*?)\}/e', '$values[\\1]', $tag_value);
我使用的是PHP5.2.9,升级不是一个选项
正则表达式不是我的专长,我无法独自解决这个问题。任何帮助都将不胜感激。您无法通过简单的
预替换来完成此操作,因为数组反引用不是通过/e
修饰符完成的。相反,您可以使用preg\u replace\u 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
不是放在括号内的合适材料。你不能用一个简单的preg\u replace
来完成这一点,因为数组取消引用不是用/e
修饰符完成的。相反,你可以使用preg\u replace\u回调
函数:
$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
不是放在括号内的正确内容。@krishna:\\1
不是打字错误。它指的是第一个反引用。与e
修饰符结合,这将导致\\1
被替换为第一个捕获组i中捕获的内容。)n正则表达式,即{…}
之间的内容。但替换参数需要更改为'$values[“\\1”]'
(否则,它很可能会抱怨未定义的常量)@AmalMurali Oh,抱歉提供了错误的信息,感谢您提供的信息..看起来这与名称空间有关。请看。我不认为preg_replace()
是导致此错误的原因。@krishna:\\1
不是打字错误。它指的是第一个反向引用。与e
修饰符相结合,这将导致\\1
被替换为正则表达式中第一个捕获组中捕获的内容,即{…}之间的内容
。需要将替换参数更改为“$values[“\\1”]”
(否则,它很可能会抱怨未定义的常量)。@AmalMurali Oh抱歉提供了错误的信息,感谢您提供的信息..看起来这与名称空间有关。请参阅。我不认为preg_replace()
是导致此错误的原因。preg\u replace\u callback()
确实是正确的解决方案,但我认为OP正在尝试解决错误“警告:输入中的意外字符:'\'(ASCII=92)state=1”@AmalMurali我认为OP最终想要让代码正常工作。但是,为了完整性起见,我正在用错误的解释更新答案。preg\u replace\u callback()
确实是正确的解决方案,但我认为OP试图解决错误“警告:输入中的意外字符:'\'(ASCII=92)state=1”@AmalMurali我认为OP最终想要让代码正常工作。但是,为了完整性起见,我正在更新答案并解释错误。