确定是正则的问题.
你可以 <a href=baidu.com>百度 </a> 和<a href=sina.com>新浪 </a>替换一下,就可以.其实你可以完全不用ob_get_contents()函数,直接用正则处理一下" <a href=abcbaidu.com>百度 </a> <a href=abcsina.com>新浪 </a>"和"<a href=sina.com>新浪 </a> <a href=baidu.com>百度 </a>"就能得到结果了.

解决方案 »

  1.   

    我没有仔细看你的正则,我只是把调整新浪和百度这两个串的前后位置,然后用你的正则来替换,发现结果是不一样的.function RegAll($str,$dir)//替全部地址路径 

    return preg_replace("/( <a.*?href| <img.*?src| <link.*?href| <script.*?src| <.*?background)([\s]*=[\s]*[\"|\']?[\s]*)([^\s|\"|\'|>]+)(.*?[\/]?>)/is",'$1$2'.$dir."$3$4",$str); 

    $str = "<a href=abcbaidu.com>百度 </a> <a href=abcsina.com>新浪 </a>";
    $str1 = " <a href=sina.com>新浪 </a> <a href=baidu.com>百度 </a>";//以下结果是不一样的.
    echo RegAll($str, 'abc') . "<br/>";
    echo RegAll($str1, 'abc');
      

  2.   

    楼上的我不明白您的意思:你上面的结果输出如下:
    <a href=abcabcbaidu.com>百度 </a> <a href=abcabcsina.com>新浪 </a><br/> <a href=abcsina.com>新浪 </a> <a href=abcbaidu.com>百度 </a>
    是正确的啊?正是我们所需要的啊?你怎么说结果不一样什么意思啊?
    你不是调换位置,你第一个串原来就有abc啊:<a href=abcbaidu.com>百度 </
    晕倒
      

  3.   


    function RegAll($str,$dir)//替全部地址路径 

    $str =  preg_replace("/(<a.*?href)([\s]*=[\s]*[\"|\']?[\s]*)([^\s|\"|\'|>]+)(.*?[\/]?>)/is",'$1$2'.$dir."$3$4",$str);
    $str = preg_replace("/(<img.*?src)([\s]*=[\s]*[\"|\']?[\s]*)([^\s|\"|\'|>]+)(.*?[\/]?>)/is",'$1$2'.$dir."$3$4",$str);
    $str = preg_replace("/(<link.*?href)([\s]*=[\s]*[\"|\']?[\s]*)([^\s|\"|\'|>]+)(.*?[\/]?>)/is",'$1$2'.$dir."$3$4",$str);
    $str = preg_replace("/(<script.*?src)([\s]*=[\s]*[\"|\']?[\s]*)([^\s|\"|\'|>]+)(.*?[\/]?>)/is",'$1$2'.$dir."$3$4",$str);
    $str = preg_replace("/(<.*?background)([\s]*=[\s]*[\"|\']?[\s]*)([^\s|\"|\'|>]+)(.*?[\/]?>)/is",'$1$2'.$dir."$3$4",$str);  return $str;