Вы можете использовать preg_match_all
для сопоставления всех строк типа @somestring@
, используя регулярное выражение @([^@]+)@
, а затем выполнить итерацию по циклу for, чтобы выполнить замену каждой такой найденной строки в исходной строке, чтобы заменить ее фактическим значением изваша функция gimmeNewVal
, которая возвращает значение из вашего заданного json.
Вот код PHP для того же самого,
$myString = "@Dear@ name, this is @an example string@.";
function gimmeNewVal($myVal){ // I've replaced your function from this to make it practically runnable so you can revert this function as posted in your post
$obj = json_decode('{ "Dear":"newString1", "an example string":"newString2" }');
return $obj->$myVal;
}
preg_match_all('/@([^@]+)@/', $myString, $matches);
for ($i = 0; $i < count($matches[1]); $i++) {
echo $matches[1][$i].' --> '.gimmeNewVal($matches[1][$i])."\n";
$myString = preg_replace('/'.$matches[0][$i].'/',gimmeNewVal($matches[1][$i]), $myString);
}
echo "\nTransformed myString: ".$myString;
Печатает преобразованную строку,
Dear --> newString1
an example string --> newString2
Transformed myString: newString1 name, this is newString2.
Дайте мне знать, если это то, что вы хотели.