如何将正则表达式参数传递给 PHP 中的预置替换回调



我正在使用preg_replace_callback来解析我的[quote id=123][/quote]公告板代码标签。 使用正则表达式参数传递引号 ID 的正确方法是什么?

$str = '[quote id=123]This is a quote tag[/quote]';
$str = preg_replace_callback("^[quote id=([0-9]+)](.*?)[/quote]^", _parse_quote("123", "message"), $str);
function _parse_quote($message_id, $original_message){
    $str = '<blockquote>'.$original_message.'</blockquote>';
    return $str;
}

正则表达式应该是固定的。

  • []应该被转义以从字面上匹配它们。([]正则表达式中具有特殊含义)。

代码正在调用_parse_quote,而不是将函数传递给preg_replace_callback。只需将函数名称作为字符串传递即可。

您可以通过索引访问捕获的组。($matches[2]获得第二个捕获组)

$str = '[quote id=123]This is a quote tag[/quote]';
$str = preg_replace_callback("^[quote id=([0-9]+)](.*?)[/quote]^", "_parse_quote",  $str);
echo $str;
function _parse_quote($matches) {
    $str = '<blockquote>' . $matches[2] . '</blockquote>';
    return $str;
}

输出:

<blockquote>This is a quote tag</blockquote>

最新更新