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;

解决方案 »

  1.   

    类似/.*/这个可以匹配任意字符呀,兄弟.
    你写在一起,所以匹配background的都有可能把前面<img的给匹配进去,所以有可能就不被替换.
      

  2.   

    你可以仔细看一下,你被替换过的html文件,就会发现.
    之所以是部分被替换就是因为.*这个写法造成的.
      

  3.   

    谢谢楼上的哥们了
    最近比较忙有时间回来到csdn上再来感谢你
      

  4.   

    大哥你好:
    我感觉你三楼说的不太对啊?如下:
    你说:"类似/.*/这个可以匹配任意字符呀,兄弟. 
    你写在一起,所以匹配background的都有可能把前面 <img的给匹配进去,所以有可能就不被替换."
    我刚才测试了一下:(<a.*?href|<img.*?src|<link.*?href|<script.*?src|<.*?background)([\s]*=[\s]*[\"|\']?[\s]*)([^\s|\"|\'|>]+)(.*?[\/]?>)可以正常匹配:<img src=1.jpg><background="#fffffff"><img src=1.jpg>
    啊?没有向你所说的:"background的都有可能把前面 <img的给匹配进去,所以有可能就不被替换"
    而且您也看到了,我的background前面是使用的非贪婪匹配,并且把background放在了或运算的最后,
    我想你的说的情况并不可能发生啊?但是事实就我这个表达式有问题>?有可能我们发现的都不是问题真正的所在.
    哈哈,大哥也许,我的理解有问题,您能抽点时间举一个反例子,证明你的说法正确吗?谢谢了