我的意思是,替换<a ...>a</a> 为空,但是如果 a 标签内部有<img 的话就不替换了
比如 $content = "asdfasdfasdf<a href=><img ></a>asdfasdf"; 这个就不替换
$content = "asdfasdfasdf<a href=></a>asdfasdf"; 这个就替换掉
但是我这么写不行,有img标签也给替换掉了
$content = "asdfasdfasdf<a href=><img ></a>asdfasdf";
$content = preg_replace("/<a.*?[^img]<\/a>/i", "", $content); 
echo $content;

解决方案 »

  1.   

    试一下这个:
    $content = preg_replace("/<a.*?(?!img)<\/a>/i", "", $content); 
      

  2.   

    preg_replace("/<a[^>]+>(?!<img).*<\/a>/i", "", $content); 
      

  3.   


    $str = "<a href='casd' >cay </a> <a href='casd' ><img />cay </a> ";
    function imgcheck($str){
    return preg_match("/<img[^>]+?>/",$str[0])?$str[0]:'';
    }
    echo preg_replace_callback("/(<a[^>]+?>.+?<\/a>)/","imgcheck",$str);php是非常强大的~~~
      

  4.   

    <?php $str = "<a href='casd' > scay </a> <a href='casd' > <img />cay </a>\n<a href='casd' > scay </a> <a href='casd' > <img />cay </a>";
    [code=PHP]
    $str_s = preg_replace('/<a[^>]+>(?![^<>]+<img).*?<\/a>/im' , '' , $str);echo htmlspecialchars($str_s);?>
    [/code]
      

  5.   

    <?php $str = "<a href='casd' > scay </a> <a href='casd' > <img />cay </a>\n<a href='casd' > scay </a> <a href='casd' > <img />cay </a>";$str_s = preg_replace('/<a[^>]+>(?![^<>]+<img).*?<\/a>/im' , '' , $str);echo htmlspecialchars($str_s);?>