当我在替换中使用{时,PHP preg_replace不起作用

问题描述 投票:1回答:2

由于某些原因,当替换包括花括号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 regex preg-replace
2个回答
0
投票

$必须转义,因为PHP试图将$3扩展为变量,但是PHP中的变量名不能只是数字。

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

0
投票

用花括号代替用双引号引起来的字符串在PHP中有一些明确的用途,因此在您的情况下,PHP可能会认为您希望在看到花括号时声明一个变量,因为您可以执行以下操作:] >

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

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

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

因为以上解释不适用于单引号。

© www.soinside.com 2019 - 2024. All rights reserved.