首页 > 解决方案 > 当我在替换中使用 { 时 PHP preg_replace 不起作用

问题描述

preg_replace当替换包含花括号时,由于某种原因不起作用{}

如果原始行是:

$Original_Line = "new_Journey('Iceland', {character: 'lidenbrock'}, {author : 'verne', destination : 'snæfellsjökull'})";

并且替换(在模式匹配之后)是:

new_Journey('$1', [$3, $2])

给出以下模式匹配/替换:

$Replacement_Line = preg_replace("/new_Journey\(\'([^\']+)\'\,\s*\{([^\}]+)\}\,\s*\{([^\}]+)\}\)\;/", "new_Journey('$1', [$3, $2])", $Original_Line);

输出是正确的(尽管使用方括号[]而不是花括号{}):

new_Journey('Iceland', [author : 'verne', destination : 'snæfellsjökull', character: 'lidenbrock']);

但是,如果替换使用花括号{}而不是方括号[],如下所示:

new_Journey('$1', {$3, $2})

输出是一个错误:

解析错误:语法错误,意外的 '3' (T_LNUMBER),在第5行的[...][...]中需要变量 (T_VARIABLE) 或 '{' 或 '$'

{}我应该在替换中转义花括号吗?如果是这样,怎么做?

标签: phppreg-replace

解决方案


花括号而不是双引号字符串在 PHP 中有一些明确的用途,因此在您的情况下,PHP 可能认为您希望在看到打开的花括号时声明一个变量,因为您可以执行以下操作:

$var = "bananas";
$test = "{$var} are yummy" // Will execute: bananas are yummy

您可以将整个字符串替换为单引号并转义$1,如下所示:

'new_Journey(\'$1\', {$3, $2})'

由于上述解释不适用于单引号。


推荐阅读