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

Posted

技术标签:

【中文标题】如何将正则表达式参数传递给 PHP 中的 preg 替换回调?【英文标题】:How do I pass a regex parameter to a preg replace callback in PHP? 【发布时间】:2014-03-19 07:38:08 【问题描述】:

我正在使用 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;


【问题讨论】:

【参考方案1】:

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

[] 应该被转义以匹配它们。 ([]在正则表达式中有特殊含义)。

代码调用_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>

【讨论】:

以上是关于如何将正则表达式参数传递给 PHP 中的 preg 替换回调?的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给正则表达式构造函数,并在 String.matchAll 方法中使用 [重复]

js 如何正则匹配多个,像php 的preg_match()

php正则表达式如何匹配title?

PHP中使用正则表达式详解 preg_match() preg_replace() preg_mat

AngularJS:如何将参数/函数传递给指令?

PHP正则