Regex для соответствия “{число}”

Я должен заменить "{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()

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

5
задан amphetamachine 11 July 2010 в 23:34
поделиться

2 ответа

Отсутствует следующая строка:

$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 в строке замены относится к строке, захваченной первой (и единственной) группой захвата.

8
ответ дан 18 December 2019 в 14:41
поделиться
$code = preg_replace('/\{(\d+)\}/', 'test($1)', $code);

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

5
ответ дан 18 December 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: