0
function parse($string){
    $counter = 0;
    
    $string = preg_replace("_\[b\](.*?)\[/b\]_si", '<span class="b">'. $counter .'. $1</span>', $string, -1, $counter);
    
    return $string;
}

タグを解析し、その前にカウントを配置するubbパーサーを作成しようとしています:

[b]Hey[/b]
[b]Hello[/b]

これを返す必要があります:

<span class="b">1. Hey</span>
<span class="b">2. Hello</span>

しかし、これを返しています:

<span class="b">1. Hey</span>
<span class="b">1. Hello</span>

上記の機能に加えて、私はこれを試しました:

function parse($string){
    
    $counter = 0;
    
    $string = preg_replace_callback(("_\[b\](.*?)\[/b\]_si", function(){
        '<span class="b">'. $counter++ .'. $1</span>',
    }, $string);
}

しかし、それと上部の機能は機能しませんでした。私は何を間違っていますか、そして/または私は試すことができますか?

4

3 に答える 3

3

カウンターをプロパティとして持つ小さなクラスで解決し、コールバックはクラスのメソッドです。

class Increaser {
    private $counter;

    public function replace($string) {
        $this->counter = 0;

        return preg_replace_callback("_\[b\](.*?)\[/b\]_si", array($this, 'createReplacement'), $string);
    }

    private function createReplacement($matches) {
        ++$this->counter;

        return '<span class="b">'. $this->counter .'. ' . $matches[1] . '</span>';
    }
}
于 2013-11-08T14:53:42.507 に答える