1. ホーム
  2. php

[解決済み] preg_replace_callback の使用方法について教えてください。

2022-02-19 21:14:57

質問

次のようなHTML文があります。

[otsection]Wallpapers[/otsection]
WALLPAPERS GO HERE

[otsection]Videos[/otsection]
VIDEOS GO HERE

私がやろうとしていることは、[otsection]タグをhtmlのdivに置き換えることです。 その際、divのidを1->2->3...と増やしたいのですが、どうすればよいでしょうか?

ですから、例えば、上記の文は、次のように翻訳されるべきです。

<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時間作業しても、うまくいきません。

何かお手伝いいただけることがあれば、ぜひお願いします。

解決方法は?

以下をお使いください。

$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は数字で始めてはいけません。


PHP5.3以前の場合。

$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);