PHP:如何将变量从正则表达式替换传递给函数?

时间:2012-07-12 21:46:06

标签: php regex

我想要一个带

的正则表达式
[QUOTE=3]

并将其转换为

<div class="quoted"><div class="quotation-author">Originally written by <strong>AUTHOR_WITH_ID=3</strong></div>

我得到的几乎是正确的,但是我无法将变量传递给获取作者姓名的函数。

$comment = preg_replace('/\[\s*QUOTE=(\d+)\s*\]/i', '<div class="quoted"><div class="quotation-author">Originally written by <strong>'.get_comment_author((int)'$1').'</strong></div>', $comment);

2 个答案:

答案 0 :(得分:3)

替换:

'<div class="quoted"><div class="quotation-author">Originally written by <strong>'.get_comment_author((int)'$1').'</strong></div>'

不会动态发生;它被评估,然后作为参数传递。使用preg_replace_callback为每个匹配调用一个函数,如下所示:

$comment = preg_replace_callback('/\[\s*QUOTE=(\d+)\s*\]/i', function($m) {
    return '<div class="quoted"><div class="quotation-author">Originally written by <strong>'.get_comment_author((int) $m[1]).'</strong></div>';
}, $comment);

答案 1 :(得分:0)

您无法使用preg_replace,因为get_comment_author(以及(int)强制转型)的调用在 preg_replace之前发生

尝试使用preg_replace_callback

$comment = preg_replace_callback('/\[\s*QUOTE=(\d+)\s*\]/i', function($a){
    return '<div class="quoted"><div class="quotation-author">Originally written by <strong>'.get_comment_author($a[1]).'</strong></div>';
}, $comment);

注意:根据get_comment_author的作用,您不需要(int)演员。