正则表达式匹配“{number}”

时间:2010-07-11 23:28:24

标签: php regex performance

我需要将“{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 个答案:

答案 0 :(得分:8)

缺少的是:

$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是指第一个(也是唯一一个)捕获组捕获的字符串。

答案 1 :(得分:5)

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

根据我的经验,preg_replace 比使用str_replacestrtr进行替换的任何方法更快。