dongquqiao2010 2014-11-20 17:48
浏览 27
已采纳

替换为相同的命名PHP变量

My Example:

$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();

When I do only:

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

What am i doing wrong? Why is PHP not using the generated $name var? This is only a example. I would like to work this with any replace:

[foo] --> $foo
[bar] --> $bar
...
  • 写回答

3条回答 默认 最新

  • duancaoqin6683 2014-11-20 18:24
    关注

    As per OP's wish to post my comment as an answer:

    In order for this to work, you will need to change [name] to [$name] and ${"$1"} to "$1"

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

    PHP needs a variable to go on, so using [name] isn't being populated.


    As per another and earlier comment I made, alternatively you could very well do:

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

    If you have a framework with existing brackets, then that is something you haven't told us, only that you said in comments:
    " have much more Placeholders, not only [name]", whether it's part of something bigger, then stick to the accepted method.


    As per in comments, you could alternatively use "/\[([^\]]+)\]/" instead of "/\[(.*)]/"
    Or "/[(.*?)]/" :)

    in regards to using for example: "[$foo]bar[$foo]"

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢