首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用preg_replace_callback用html替换自定义标记

使用preg_replace_callback用html替换自定义标记
EN

Stack Overflow用户
提问于 2015-02-09 13:05:16
回答 2查看 169关注 0票数 0

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

代码语言:javascript
复制
[block-2] "Donec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris". [/block-2]

如果遇到上述块标记,则应该用一些html标记(使用regexp)替换它,特别是:

代码语言:javascript
复制
  <blockquote class="tm-style2"><span>
 "Donec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris".
 </span></blockquote>

我试过以下几种方法,但都不起作用。请帮助:

代码语言:javascript
复制
$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); 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-09 13:18:59

您实际上不需要使用preg_replace_callback函数,只要preg_replace就行了。

代码语言:javascript
复制
\[(block-([0-9]+))\](.+?)\[\/\1\]

然后将匹配的字符替换为

代码语言:javascript
复制
<blockquote class="tm-style\2"><span>\n\3\n</span></blockquote>

演示

代码语言:javascript
复制
$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;

输出:

代码语言:javascript
复制
<blockquote class="tm-style2"><span>
 "Donec volutpat nibh sit amet libero ornare non laoreet arcu luctus. Donec id arcu quis mauris". 
</span></blockquote>
票数 1
EN

Stack Overflow用户

发布于 2015-02-09 13:08:50

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28410529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档