2013-03-08 80 views
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; 

?>

+2

我不知道這是否會工作,但'「\ $ {$ 1}」'可能會奏效? – Class 2013-03-08 02:08:01

+0

@Class可以在字符串中獲得'$',但不會計算變量(即字符串中的$ a應計算爲hello)。 – Vulcan 2013-03-08 02:17:34

+0

這只是一個猜測...... – Class 2013-03-08 02:21:19

回答

2

您需要評估重置價值爲PHP的,所以你需要e修飾符(雖然現在看來,這是不贊成的PHP 5.5 ...的)。您還需要一個量詞爲$xx包含不止一個字符:

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

working example on codepad

順便說一句,我更喜歡單引號,以避免PHP試圖尋找變量的問題。

+0

'/ regex /'看起來更好。特別是在正則表達式中沒有'\'符號時。 – 2013-03-08 02:21:29

1

爲了將變量以這種方式,你應該做這樣的事情:

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

但是請注意,在使用$GLOBALS通常是一個壞主意。理想情況下,你應該有這樣的事情:

$replacements = array(
    "%a"=>"hello", 
    "%xx"=>"jimmy" 
); 
$b = strtr(A,$replacements); 
相關問題