php正则判断a、img标签中是否存在指定关键词

我要实现的是关键词替换功能,a、img标签中有关键词会破坏html结构,我用正则判断不成功。

$words = array('需求'=>'<a href="/xuqiu/">需求</a>','二孩'=>'<a href="/erhai/">二孩</a>');

$html = "<p>据不完全统计,在过去国大概50-60%的住房销售给了80后,这期间我国<a href="/a/23423.html"  title="房地产需求刚性需求">房地产需求刚性需求</a>为主。而未来随着<a href="/a/sdfsdf.html" title="二孩全面放开政策">二孩全面放开政策</a>的实施,将逐步转向改善性需求为主。从长远来看或许将改变居住格局。如果只有一个孩子,<img src="" alt="房地产需求刚性需求" />两房或三房就基本够住了,但多了一个孩子以后,更多家庭或倾向于换房间更多的大户型。</p>";
    
<?php
    //我写的,判断关键词是否存在a或img中
    function findword($word,$html){
        $str_reg = '(<a[^>]+>)(.*)('.$word.')(.*)(<\/a[^>]*>)';
        $str_reg .= '|(<img)(.*?)('.$word.')(.*?)(>)' ;
        if(preg_match("/$str_reg/",$html)){
            return true;
        }else{
            return false;
        }
    }
?>

阅读 3.8k
3 个回答

你先把破坏规则的做一下置换,比如htmlspecialchars处理,替换完再置换回去就好了啊

(<a[^>]+>)(.*)('.$word.')(.*)(<\/a[^>]*>)
为什么不是
(<a[^>]+>)(.*?)('.$word.')(.*?)(<\/a[^>]*>)

为什么不用xpath或者selecter做?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题