【问题标题】:Replace with same named PHP variable替换为同名 PHP 变量
【发布时间】:2015-01-18 16:53:07
【问题描述】:

我的例子:

$name = "Simon";
$string = "My name is [name].";
echo preg_replace("/\[(.*)]/", ${"$1"}, $string);
// Expected: My name is Simon.
// I get: My name is .
// ${"$1"} should be $name?
exit();

当我只做:

echo preg_replace("/\[(.*)]/", "$1", $string);
// I get: My name is name.
// $1 = name

我做错了什么?为什么 PHP 不使用生成的 $name var? 这只是一个例子。我想用任何替换来解决这个问题:

[foo] --> $foo
[bar] --> $bar
...

【问题讨论】:

  • echo str_replace("[name]",$name,$string);
  • 嘿 Asik,我不想使用 str_replace,因为我想用更多的变量来做。我想用任何替换来解决这个问题。 [foo] > $foo[bar] > $bar等。我不想使用数组。
  • 您是否有特殊原因要使用preg_replace() 等,而不仅仅是$string = "My name is " .$name;?如果您只想回显/填充用户名,这听起来有点矫枉过正。
  • 解释不清楚。还有很多修改...?
  • 为了使其工作,您需要将[name] 更改为[$name] 并将${"$1"} 更改为"$1"。至少,从我所能收集到的。否则,您将需要修改某些内容。如果你能忍受,那就太好了。

标签: php regex variables preg-replace preg-replace-callback


【解决方案1】:

根据 OP 希望发表我的评论作为答案:

为了使其正常工作,您需要将 [name] 更改为 [$name]${"$1"} 更改为 "$1"

$name = "Simon";
$string = "My name is [$name].";

echo preg_replace("/\[(.*?)]/", "$1", $string);

PHP 需要一个变量才能继续运行,因此不会填充使用 [name]


按照我的another and earlier comment,或者你也可以这样做:

$name = "Simon";
$string = "My name is " .$name;

echo $string;

如果您有一个带有现有括号的框架,那是您没有告诉我们的,只是您在 cmets 中说的:
" 有更多的占位符,而不仅仅是 [name]" em>,无论它是更大的一部分,然后坚持接受的方法。


根据 cmets,您也可以使用 "/\[([^\]]+)\]/" 代替 "/\[(.*)]/"
或 "/[(.*?)]/" :)

关于使用例如:"[$foo]bar[$foo]"

【讨论】:

  • dv 是怎么回事?
  • 如果我解释得不好/错误,我会调整我的答案。
  • preg_replace 删除方块?认真的吗?
  • @vp_arth 我知道,但这就是 OP 似乎想要使用的。肯定是有原因的。我问了,但 OP 没有回答原因。根据this comment
  • 你应该先取消它。 "[$name]text[$name]" -> "$name" 现在
【解决方案2】:

我建议你使用这样的东西:

class Tpl {
  private $tpl;
  public function __construct($tpl) {
     $this->tpl = $tpl;
  }
  public function render($data) {
    $result = $this->tpl;
    foreach ($data as $key => $value) {
      $result = str_replace("%%$key%%", str_replace('%%', '', $value), $result);
    }
    return $result;
  }
}

$greet = new Tpl('Hello, %%name%%');
echo $greet->render(array('name' => 'World'));

但您必须始终注意正确转义占位符格式。 我只是删除它:)

【讨论】:

  • 最后我用占位符 {{FOO}} 格式化了 mysql 中的变量并使用了strtr()。感谢大家的帮助!所以不可能在 mysql 中存储“真实”的 php Vars 和 Text 吗?我从安全问题的角度理解它,但应该有这个选项。
【解决方案3】:

根本不需要preg_replace
无论如何你都使用 variable_names - 所以 php 已经有了这个占位符 - "{$var}":

$name = "Simon";
$string = "My name is {$name}.";

【讨论】:

  • 这就是I wrote,但 OP 似乎出于特定原因想要使用它。为什么,我不知道。
  • 在 mysql 字段中,我存储与 PHP Vars 混合的文本:bla $foo bla $bar。如果我存储这个 mysql 结果并回显它,我会得到相同的结果:bla $foo bla $bar。如果我使用占位符 [foo], [bar] 存储文本并稍后将它们更改为 $PHPVars 结果应该是 bla FOOVAR-CONTENT bla BARVAR-CONTENT (在我回显 mysql 之前,变量已经在脚本中设置)
  • 所以 OP 确实有一个“特殊”原因 ;)
  • 那我应该怎么做呢?我想将变量的已设置值放入我的 mysql-result 中?
  • 没有理由...没有任何利润...从a {$v} b {$v}a [v] b [v] 没有区别,如果您需要$v 变量来使其工作...
猜你喜欢
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2011-04-08
  • 2013-06-28
  • 2022-01-11
相关资源
最近更新 更多