我想要一个带
的正则表达式[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);
答案 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)
演员。