我需要将“{Z}”替换为“test(Z)”,其中Z始终是使用PHP和正则表达式的无符号整数(除非有更快的方法?)。
$code='{45} == {2}->val() - {5}->val()';
// apply regex to $code
echo $code;
// writes: test(45) == test(2)->val() - test(5)->val()
棘手的部分是它需要尽可能以速度和内存使用的方式完成。
答案 0 :(得分:8)
缺少的是:
$code = preg_replace('/{([0-9]+)}/', 'test($1)', $code);
工作原理:
{ match a literal { ( start a capturing group [0-9]+ one or more digits in 0-9 ) end the capturing group } match a literal }
替换字符串中的$ 1是指第一个(也是唯一一个)捕获组捕获的字符串。
答案 1 :(得分:5)
$code = preg_replace('/\{(\d+)\}/', 'test($1)', $code);
根据我的经验,preg_replace
比使用str_replace
或strtr
进行替换的任何方法更快。