PHP preg_replace所有匹配

时间:2017-06-07 16:00:33

标签: php regex

我想使用preg_replace替换所有匹配,但它只能使用一次。

这是我使用的功能:

function bbc2html($text) {
    $find = array(
        '~\[spoiler\](.*?)\[/spoiler\]~s'
    );
    $replace = array(
        '<font color="red"><b>ATTENTION: SPOILER ALARM!</b></font><br>$1'
    );
    return preg_replace($find,$replace,$text);
}

输入:

echo bbc2html('[spoiler]Its a spoiler[/spoiler]');
echo bbc2html('[spoiler][spoiler]Its a multiple spoiler[/spoiler][/spoiler]');

输出:

<font color="red"><b>ATTENTION: SPOILER ALARM!</b></font><br>Its a spoiler
<font color="red"><b>ATTENTION: SPOILER ALARM!</b></font><br>[spoiler]Its a multiple spoiler[/spoiler]

2 个答案:

答案 0 :(得分:1)

function bbc2html($text) {
$find = array(
    '~(\[spoiler\])+(.*?)(\[/spoiler\])+~s'
);
$replace = array(
    '<font color="red"><b>ATTENTION: SPOILER ALARM!</b></font><br>$2'
);
return preg_replace($find,$replace,$text);
}

可以吗?

答案 1 :(得分:0)

这是另一个功能:

function bbc2html($text) {
$find = array(
    '~(\[spoiler\]\w*)+(.*?)(\[/spoiler\])+~s'
);
$replace = array(
    '<font color="red"><b>ATTENTION: SPOILER ALARM!</b></font><br>$2'
);
return preg_replace($find,$replace,$text);
}