2011-12-06 49 views
0

我想下载一个站点,将该站点上的所有链接替换为内部链接。正则表达式替换所有链接,但css和js

,很容易:

$page=file_get_contents($url); 
$local=$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; 
$page=preg_replace('/href="(.+?)"/','href="http://'.$local.'?href=\\1"',$page); 

,但我想排除更换所有css文件和js文件,所以我尝试:

$regex='/href="(.+?(?!(\.js|\.css)))"/'; 
$page=preg_replace($regex,'href="http://'.$local.'?href=\\1"',$page); 

,但没有工作,

什么时我做错了?

我想

?! 

是负先行

回答

5

要回答你问题,你需要一个回顾后有更好的限制与之匹配的字符类:

$regex = '/href="([^"]+(?<!\.js|\.css))"/'; 

的charclass首先匹配整个链接内容,然后断言这不会以.js.css结束。 甚至可以用<a\s[^>]*?来扩充整个匹配,所以它只能找到任何看起来像链接的东西。

另一种选择是使用这样的任务,通常是乏味和更多的代码,但简单的程序添加条件:

htmlqp->find("a") FOREACH $a->attr("href", "http:/...".$a->attr("href")) 
// would need a real foreach and an if and stuff.. 
+0

THX,该正则表达式工作 – rubo77