php preg_替换多个反向引用

php preg_替换多个反向引用,php,regex,preg-replace,Php,Regex,Preg Replace,我试图使用php preg_replace替换字符串,但我不喜欢我的解决方案 我有: $input = '{@something,param1,param2,param3,paramN}'; $something = 'any string with %3 and %1, then %2 and any more params like %N'; 我想要: $output = 'any string with param3 and param1, then param2 and any mor

我试图使用php preg_replace替换字符串,但我不喜欢我的解决方案

我有:

$input = '{@something,param1,param2,param3,paramN}';
$something = 'any string with %3 and %1, then %2 and any more params like %N';
我想要:

$output = 'any string with param3 and param1, then param2 and any more params like paramN';
当我只有3个或更少的参数时,以下代码可以工作,但不干净:

preg_replace('/\{@'.$someting.',([\$]?[^}]+),([\$]?[^}]+),([\$]?[^}]+)\}/i', 'str_replace(array("%1","%2","%3"),array(\1,\2,\3),"'.$data.'")', $input);
preg_replace('/\{@'.$someting.',([\$]?[^}]+),([\$]?[^}]+)\}/i', 'str_replace(array("%1","%2"),array(\1,\2),"'.$data.'")', $input);
preg_replace('/\{@'.$someting.',([\$]?[^}]+)\}/i', 'str_replace("%1",\1,"'.$data.'")', $input);
我正在寻找更好的解决方案,将这三条线合并为一条。 我想用这样的东西:

preg_replace('/\{@'.$someting.',(PATTERN)\}/i', 'str_replace(array("%1","%2","%N"),array(\1,\2,\N),"'.$data.'")', $input);

这看起来像是
preg_replace_callback的作业
。因此您的输入实际上是
{@any string with%3和%1,然后是%2和任何其他参数,如%N、param1、param2、param3、paramN}
?我不清楚您在问什么,您能发布一个关于当前文本和所需输出的示例数据吗?我有一个文本文件,哪里是像$input这样的字符串。@后面的第一个单词是定义的变量名,逗号后面的单词是参数。变量是具有参数%N的可读文本,要替换。