2015-02-09 52 views
0

我试图做一个替换HTML标签定制标签在我的网站如下与HTML更换自定义标签一些html标签(使用正则表达式),具体如下:使用preg_replace_callback

<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); 
+0

没有必要创建preg_replace_callback函数。 – 2015-02-09 13:09:04

回答

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> 
+0

此解决方案在本地无效 – nixxx 2015-02-09 14:10:58

+0

您的意思是不工作?你能解释为什么吗? – 2015-02-09 14:12:23

+0

我的意思是将你的代码复制到一个新的php文件中,执行时不会产生任何结果! – nixxx 2015-02-09 14:16:53

0

你需要逃避关闭标签的反斜杠在你的模式...[\/block...

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

+0

对不起,我输错了它。即使逃脱了它仍然无法工作。 – nixxx 2015-02-09 13:17:58

相关问题