如何在字符串中将%xxx替换为$ xxx?

时间:2013-03-08 02:05:05

标签: php regex

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

2 个答案:

答案 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);