如何在字符串中将%xxx替换为$ xxx?
<?php
// how to replace the %xxx to be $xxx
define('A',"what are %a doing, how old are %xx ");
$a='hello';
$xx= 'jimmy';
$b= preg_replace("@%([^\s])@","${$1}",A); //error here;
// should output: what are hello doing,how old are jimmy
echo $b;
&GT;
答案 0 :(得分:2)
您需要将替换值评估为php,因此您需要e
修饰符(尽管从PHP 5.5开始它似乎已被弃用...)。您还需要一个量词,因为$xx
包含多个字符:
$b= preg_replace('@%([^\s]+)@e','${$1}',A);
^ ^
请参阅working example on codepad。
顺便说一句,我更喜欢使用单引号来避免php试图查找变量的问题。
答案 1 :(得分:1)
为了以这种方式合并变量,你应该做这样的事情:
$b = preg_replace_callback("/(?<=%)\w+/",function($m) {
return $GLOBALS[$m[0]];
},A);
但请注意,使用$GLOBALS
通常是一个坏主意。理想情况下,你应该有这样的东西:
$replacements = array(
"%a"=>"hello",
"%xx"=>"jimmy"
);
$b = strtr(A,$replacements);