2016-11-18 87 views
-1

这是我的JSON文件 sample.json如何使用preg_replace替换JSON值?

{ 
    "lbl_name":"Your name", 
    "dynamic_name":"Hi, {{ name 1 }}, {{ name 2 }} and {{ name 3 }}" 
} 

$content = file_get_contents(sample.json); 
$translate = json_decode$content, true); 
$replaceContent = preg_replace('/\{{[^)]*\}}/', '%s', $translate); 
print_r($replaceContent); 

我得到的结果

Array ([lbl_name] => Your name [dynamic_name] => Hi %s) 

我想结果应该是

Array ([lbl_name] => Your name [dynamic_name] => Hi %s, %s and %s) 

谢谢

+1

让你的正则表达式不贪心:'*' - >'*?' – Rizier123

回答

1

你的正则表达式是贪婪的,所以试图匹配最大的匹配它可以得到。

使用? - 控制字符,使你的模式是非贪婪的,这意味着它的最小匹配匹配它可以得到:

$data = "Hi, {{ name 1 }}, {{ name 2 }} and {{ name 3 }}" 
echo preg_replace('/{{[^)]*?}}/', '%s', $data); 
//prints Hi, %s, %s and %s 
1

检查这一点,

$data = '{ 
    "lbl_name":"Your name", 
    "dynamic_name":"Hi, {{ name 1 }}, {{ name 2 }} and {{ name 3 }}" 
}'; 

$data = json_decode($data, true); 

$dynamic_name = $data['dynamic_name']; 
$lbl_name = $data['lbl_name']; 

preg_match_all('/{{ (.*?) }}/', $dynamic_name, $display); 
$dynamic_name = "Hi ".$display[1][0].", ".$display[1][1]." and ".$display[1][2]; 

$newArray = array('lbl_name'=> $lbl_name, 'dynamic_name'=>$dynamic_name); 
print_r($newArray);