Я должен заменить "{Z}" "тестом (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);
Как это работает:
{ match a literal { ( start a capturing group [0-9]+ one or more digits in 0-9 ) end the capturing group } match a literal }
$ 1 в строке замены относится к строке, захваченной первой (и единственной) группой захвата.
$code = preg_replace('/\{(\d+)\}/', 'test($1)', $code);
По моему опыту, preg_replace
работает намного быстрее, чем любой метод замены с помощью str_replace
или strtr
.