php preg_replace多个反向引用

时间:2014-08-22 23:29:39

标签: 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 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);

0 个答案:

没有答案