之前看你恢复了这个帖子,http://bbs.csdn.net/topics/330097621,是关于正则替换的我我类似的问题,关键词1 <a href="11" class="keyword" target="_blank">关键词1 </a> sdfaj 关键词1 关键词2
关键词2 <a href="11" class="keyword" target="_blank">关键词2 </a> sdfaj 关键词2  关键词1
我只想替换一段文本中<a></a>之外的关键词 ,每个关键词之需要替换2次即可aaa <a href="11" class="keyword" target="_blank">关键词1 </a> sdfaj aaa bbb
bbb <a href="11" class="keyword" target="_blank">关键词2 </a> sdfaj 关键词2  关键词1关键词替换

解决方案 »

  1.   

    这个一步完成有点难,至少我个人水平这样
    先使用preg_replace 结合 limit参数把关键字都替换
    再把不需要替换的部分换回来但因为不清楚有多少个<a>,limit很难把握
    建议还是用while,遇到关键字判断一下是否在<a>内再决定替换,满足两次就break
      

  2.   

    $html = <<<html
    关键词1 <a href="11" class="keyword" target="_blank">关键词1 </a> sdfaj 关键词1 关键词2
    关键词2 <a href="11" class="keyword" target="_blank">关键词2 </a> sdfaj 关键词2  关键词1
    html;
    $p = array( '#(?=[^>]*(?=<(?!/a>)|$))关键词1#', '#(?=[^>]*(?=<(?!/a>)|$))关键词2#' );
    $r = array( 'aaa', 'bbb');
    echo preg_replace($p, $r, $html, 2);
    aaa <a href="11" class="keyword" target="_blank">关键词1 </a> sdfaj aaa bbb
    bbb <a href="11" class="keyword" target="_blank">关键词2 </a> sdfaj 关键词2  关键词1
      

  3.   


    谢谢你的解答,很好用。
    就是本人不懂正则,看不懂什么意思
    如果能解释一下“#(?=[^>]*(?=<(?!/a>)|$))关键词1#”的每部分意思就更好了