2

如何将字符串中的 %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;

?>

4

2 回答 2

2

您需要将替换值评估为 php,因此您需要e修饰符(尽管从 php 5.5 开始它似乎已被弃用......)。您还需要一个量词,因为$xx它包含多个字符:

$b= preg_replace('@%([^\s]+)@e','${$1}',A);
                          ^  ^

请参阅codepad 上的工作示例

顺便说一句,我更喜欢单引号,以避免 php 尝试查找变量时出现问题。

于 2013-03-08T02:19:13.343 回答
1

为了以这种方式合并变量,您可能应该执行以下操作:

$b = preg_replace_callback("/(?<=%)\w+/",function($m) {
        return $GLOBALS[$m[0]];
    },A);

但是请注意,使用$GLOBALS通常是一个坏主意。理想情况下,你应该有这样的东西:

$replacements = array(
    "%a"=>"hello",
    "%xx"=>"jimmy"
);
$b = strtr(A,$replacements);
于 2013-03-08T02:23:20.803 回答