Регулярное выражение соответствует {{число} "

Мне нужно заменить «{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() 

Сложная часть состоит в том, что это нужно делать наилучшим образом в отношении скорости и использования памяти.

Недопустимая строка:

 $code = preg_replace('/{([0-9]+)}/', 'test($1)', $code); 

Как это работает:

 {сопоставить литерал {
 (запустите группу захвата
 [0-9] + одна или несколько цифр в 0-9
 ) завершите группу захвата
 } соответствует литералу}

$ 1 в строке замены относится к строке, захваченной первой (и только) группой захвата.

 $code = preg_replace('/\{(\d+)\}/', 'test($1)', $code); 

По моему опыту, preg_replace намного быстрее, чем любой способ выполнения str_replace с использованием str_replace или strtr .