Регулярное выражение для соответствия "{число}" - PullRequest
5 голосов
/ 12 июля 2010

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

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

Ответы [ 2 ]

8 голосов
/ 12 июля 2010

Недостающая строка:

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

5 голосов
/ 12 июля 2010
$code = preg_replace('/\{(\d+)\}/', 'test($1)', $code);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...