请教php下的正则替换标签,保留内容问题

weixin_41222140 2017-11-30 12:41:16

$str = '<div>欢迎访问<a href="http://bbs.csdn.net/">CSDN论坛</a> 和 <a href="http://www.baidu.com"><a href="http://www.baidu.com">百度官网</a></a></div> <span class="sensitiveword"><span class="sensitiveword"><span class="sensitiveword">今日头条</span></span></span>';
$str = preg_replace(array('/<a[^>]*>(.*?)<\/a>/is' , '/<span class="sensitiveword">(.*?)<span>/is'), "$1", $str);
echo $str;


请教各位同学,我想在上面代码中 去掉所有含a href标签或指定span,保留链接或者span内容,第一个csdn论坛替换成功,但是第二个百度官网,这几个还是有链接,像这样要怎么处理 谢谢
...全文
253 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小熊开发 2017-11-30
  • 打赏
  • 举报
回复
        $str = '<span class="test">CSDN论坛</span>  <span class="sensitiveword">百度官网</span> <span class="sensitiveword"><span class="sensitiveword">今日头条</span></span>';
        preg_match_all('/<span[^>]+?class="sensitiveword"[^>]*?>/', $str, $matchs);
        $num = count($matchs[0]);
        for($i=1; $i<=$num; $i++) {
            $str = preg_replace('/(<(span)[^>]+?class="sensitiveword"[^>]*?>)([^\s]*?)(<\/\2>)/', '$3', $str);
        }
小熊开发 2017-11-30
  • 打赏
  • 举报
回复
php 正则不支持平衡组的,多层标签循环处理
        $str ='<span class="test">CSDN论坛</span>  <span class="sensitiveword">百度官网</span> <span class="sensitiveword"><span class="sensitiveword">今日头条</span></span>';
        preg_match_all('/(<(span)[^>]+?class="sensitiveword"[^>]*?>)([^\s]*?)(<\/\2>)/', $str, $matchs);
        $num = count($matchs[1]);
        for($i=1; $i<=$num; $i++) {
            $str = preg_replace('/(<(span)[^>]+?class="sensitiveword"[^>]*?>)([^\s]*?)(<\/\2>)/', '$3', $str);
        }
weixin_41222140 2017-11-30
  • 打赏
  • 举报
回复
很抱歉是我没有描述清楚,
$str ='<span class="test">CSDN论坛</span>  <span class="sensitiveword">百度官网</span> <span class="sensitiveword"><span class="sensitiveword">今日头条</span></span>';
$result = preg_replace('/<\/?span([^>]+?)?>/', '', $str);
echo $result;
我需要得到的结果是:
<span class="test">CSDN论坛</span>  百度官网 今日头条
只过滤 class=sensitiveword的内容
小熊开发 2017-11-30
  • 打赏
  • 举报
回复
preg_replace('/<\/?span([^>]+?)?>/', '', $str)
weixin_41222140 2017-11-30
  • 打赏
  • 举报
回复
感谢您的回复,我需要的结果是,保留a href结果,只过滤所有<span class="sensitiveword"></span> 标签代码,保留内容,要怎么处理呢, 即原始内容为:
<div>欢迎访问<a href="http://bbs.csdn.net/">CSDN论坛</a> 和  <a href="http://www.baidu.com"><a href="http://www.baidu.com">百度官网</a></a></div> <span class="sensitiveword"><span class="sensitiveword"><span class="sensitiveword">今日头条</span></span></span>
要过滤成如下结果:
<div>欢迎访问<a href="http://bbs.csdn.net/">CSDN论坛</a> 和  <a href="http://www.baidu.com"><a href="http://www.baidu.com">百度官网</a></a></div> 今日头条
小熊开发 2017-11-30
  • 打赏
  • 举报
回复
preg_replace('/<[^>]+?>/', '', $str)
小熊开发 2017-11-30
  • 打赏
  • 举报
回复
preg_replace('/(<[^>]+>)/', '', $str);
weixin_41222140 2017-11-30
  • 打赏
  • 举报
回复
感谢回复,我需要的结果是 将所有包含<span class="sensitiveword">****</span>的标签内容保留,即:
欢迎访问CSDN论坛 和 百度官网 今日头条
别的元素不去除,就只过滤该类,该class可能会被循环嵌套
小熊开发 2017-11-30
  • 打赏
  • 举报
回复
先把你想要输出的正确结果给贴出来

21,881

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧