一尘不染

如何使用preg_replace_callback?

php

我有以下HTML语句

[otsection]Wallpapers[/otsection]
WALLPAPERS GO HERE

[otsection]Videos[/otsection]
VIDEOS GO HERE

我正在尝试用html div替换[otsection]标签。问题是我想从1-> 2-> 3等增加div的id。

因此,例如,以上声明应转换为

<div class="otsection" id="1">Wallpapers</div>
WALLPAPERS GO HERE

<div class="otsection" id="2">Videos</div>
VIDEOS GO HERE

据我研究,最好的方法是通过preg_replace_callback在每次替换之间增加id变量。但是经过1个小时的研究,我无法使其正常工作。

任何帮助,将不胜感激!


阅读 243

收藏
2020-05-29

共1个答案

一尘不染

使用以下内容:

$out = preg_replace_callback(
    "(\[otsection\](.*?)\[/otsection\])is",
    function($m) {
        static $id = 0;
        $id++;
        return "<div class=\"otsection\" id=\"ots".$id."\">".$m[1]."</div>";
    },
    $in);

特别要注意的是,我使用了一个static变量。该变量在函数调用期间持续存在,这意味着每次调用函数时该变量都会递增,每次匹配都会发生。

另外,请注意,我ots是ID的前缀。元素ID不应以数字开头。


对于5.3之前的PHP:

$out = preg_replace_callback(
    "(\[otsection\](.*?)\[/otsection\])is",
    create_function('$m','
        static $id = 0;
        $id++;
        return "<div class=\"otsection\" id=\"ots".$id."\">".$m[1]."</div>";
    '),
    $in);
2020-05-29