开发者

Regex to match "{number}"

开发者 https://www.devze.com 2023-01-07 09:36 出处:网络
I need to replace \"{Z}\" with \"test(Z)\" where Z is always an unsigned integer using PHP and regular expressions (unless there\'s a faster way?).

I need to replace "{Z}" with "test(Z)" where Z is always an unsigned integer using PHP and regular expressions (unless there's a faster way?).

$code='{45} == {2}->val() - {5}->val()';
// apply regex to $code
echo $code;
开发者_Python百科// writes: test(45) == test(2)->val() - test(5)->val()

The tricky part is that it needs to be done in the best manner possible concerning speed and memory use.


The missing line is this:

$code = preg_replace('/{([0-9]+)}/', 'test($1)', $code);

How it works:

{       match a literal {
(       start a capturing group
[0-9]+  one or more digits in 0-9
)       end the capturing group
}       match a literal }

The $1 in the replacement string refers to the string captured by the first (and only) capturing group.


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

In my experience, preg_replace is much faster than any method of doing replacements using str_replace or strtr.

0

精彩评论

暂无评论...
验证码 换一张
取 消