使用 preg_replace 时如何增加替换字符串中的计数?
我有这样的代码:
$count = 0;
preg_replace('/test/', 'test'. $count, $content,-1,$count);
对于每次替换,我都会获得 test0.
我想要 test0、test1、test2 等。
I have this code :
$count = 0;
preg_replace('/test/', 'test'. $count, $content,-1,$count);
For every replace, I obtain test0.
I would like to get test0, test1, test2 etc..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
使用
preg_replace_callback()
:Use
preg_replace_callback()
:使用
preg_replace_callback()
:注意:使用
global
是硬而快速的解决方案,但它会带来一些问题,所以我不推荐它。Use
preg_replace_callback()
:Note: Using
global
is the hard-and-fast solution but it introduces some problems, so I don't recommend it.PHP5.3 发布后,我们现在可以使用闭包和
use
关键字来解决上面 Emil 提出的global
问题:返回:
注意
在函数名称后面使用 (&$count)
- 这允许我们在函数范围内读取$count
( & 使其通过引用传递,因此可以从函数的范围)。Following the release of PHP5.3 we can now use a closure and the
use
keyword to get around theglobal
issue raised by Emil above:Which returns:
Note the
use (&$count)
following the function name - this allows us to read$count
in the scope of the function (the & making it passed by reference and therefore writeable from the scope of the function).另外,如果您想避免使用全局:
$count = 0;
preg_replace_callback('/test/', 函数rep_count($matches) use (&$count) {
返回 '测试' 。 $计数++;
}, $内容);
Also, if you want to avoid using global:
$count = 0;
preg_replace_callback('/test/', function rep_count($matches) use (&$count) {
return 'test' . $count++;
}, $content);
您只需在回调函数中定义一个静态变量:
这样就不会污染全局命名空间。
对于这种特定情况,您还可以使用简单的函数:
You only have to define a static variable in the callback function:
This way you don't pollute the global namespace.
For this specific case you can also use simple functions:
preg_replace_callback()
将允许您在退回火柴进行后续更换之前对火柴进行操作。preg_replace_callback()
will allow you to operate upon the match before returning it for subsequent replacement.