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