php - 当我在替换中使用 { 时 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) 或 '{' 或 '$'
{}
我应该在替换中转义花括号吗?如果是这样,怎么做?
解决方案
花括号而不是双引号字符串在 PHP 中有一些明确的用途,因此在您的情况下,PHP 可能认为您希望在看到打开的花括号时声明一个变量,因为您可以执行以下操作:
$var = "bananas";
$test = "{$var} are yummy" // Will execute: bananas are yummy
您可以将整个字符串替换为单引号并转义$1
,如下所示:
'new_Journey(\'$1\', {$3, $2})'
由于上述解释不适用于单引号。
推荐阅读
- npm - 将 PrimeNG 安装到 Angular 应用程序中的 npm 冲突对等依赖要求
- python - 内联类型注释与存根导致不同的 mypy 行为
- python - python中的函数绑定是什么?
- excel - 调试模式和运行模式在 selenium VBA (Excel) 上的行为不同
- php - 如果我可以通过 phpmyadmin 登录,有没有办法找到 MySQL 服务器的服务器名、用户名和密码?
- java - Joda DateTimeFormatter - 模式(字符串)的方法未定义
- ruby-on-rails - Rails - 如何防止 Sidekiq 降低服务器速度?
- javascript - (Firebase / Cloud Functions)PayloadTooLargeError:queryparse 参数过多
- typescript - 有问题
- 使用 Angular 6 和 Typescript
- python - PySide2:如何使装饰槽在其工作线程上执行?