使用preg_replace_callback用html替换自定义标签

时间:2015-02-09 13:05:17

标签: html regex parsing

我试图在我的网站上用html标签替换自定义标签,如下所示:

[block-2] "Donec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris". [/block-2]

如果遇到上面的[block]标签,它应该被一些html标签替换(使用regexp),具体来说:

  <blockquote class="tm-style2"><span>
 "Donec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris".
 </span></blockquote>

我尝试过以下但是没有用。请帮忙:

$article_text = preg_replace_callback(
"(\[block-([0-9]+)\](.+)\[\/block-([0-9]+)\])",
create_function('$p','return "<blockquote class=\"tm-style".$p[1]."\"><span>".$p[2]."</span></blockquote>";'), $article_text); 

2 个答案:

答案 0 :(得分:1)

您实际上不需要使用preg_replace_callback函数,只需preg_replace即可。

\[(block-([0-9]+))\](.+?)\[\/\1\]

然后用

替换匹配的字符
<blockquote class="tm-style\2"><span>\n\3\n</span></blockquote>

DEMO

$re = "~\\[(block-([0-9]+))\\](.+?)\\[\\/\\1\\]~m";
$str = "[block-2] \"Donec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris\". [/block-2]";
$subst = '<blockquote class="tm-style\2"><span>'."\n".'\3'."\n".'</span></blockquote>';
$result = preg_replace($re, $subst, $str);
echo $result;

<强>输出:

<blockquote class="tm-style2"><span>
 "Donec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris". 
</span></blockquote>

答案 1 :(得分:0)

您需要在模式...[\/block...中转义结束标记的反斜杠。

所以完整模式是(\[block-([0-9]+)\](.+)\[\/block-([0-9]+)\])