由于某些原因,当替换包括花括号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),预期变量(T_VARIABLE)或[...] [...]中的'{'或'$'第5
行
我应该在替换中使用花括号{}
吗?如果是这样,如何?
$
必须转义,因为PHP试图将$3
扩展为变量,但是PHP中的变量名不能只是数字。
"new_Journey('$1', {\$3, \$2})"
用花括号代替用双引号引起来的字符串在PHP中有一些明确的用途,因此在您的情况下,PHP可能会认为您希望在看到花括号时声明一个变量,因为您可以执行以下操作:] >
$var = "bananas"; $test = "{$var} are yummy" // Will execute: bananas are yummy
您可以将整个字符串替换为一个单引号,并按如下所示转义
$1
:
'new_Journey(\'$1\', {$3, $2})'
因为以上解释不适用于单引号。