2010-07-25 33 views
1

需要缓存10个网站。缓存时:照片,css,js等无法正确显示,因为基本域未附加到目录。我需要一个正则表达式来将基本域添加到目录中。下面将基本域添加到目录的正则表达式

基结构域的例子:http://www.example.com

与IMG SRC = “拇指/ 123.jpg” 或SRC = “/ INC/123.js” 读缓存的网页时,会发生该问题。

如果它是img src =“http://www.example.com/thumb/123.jpg”或src =“http://www.example.com/inc/123.js,它们将正确显示”。

正则表达式是这样的:如果(SRC =“)后面没有基础域然后添加基本域

+1

有没有办法来构造一个正则表达式,将工作,其他标签可以有'SRC ='属性和字符串也可以出现在CDATA其他网页内容。正则表达式不能解析HTML或XML或XHTML解析器解析,正则表达式不会,使用'wget'或者其他一些真正知道如何翻译链接的东西 – msw 2010-07-25 04:54:59

回答

0

匹配的正则表达式:

(?:src|href)="(http://www\.example\.com/)?.+
+0

不能得到这个工作,我尝试了strDomain = http://www.example .com和RegEx.Pattern =“(?:src | href )= CHR(34)(strDomain)?+“,当我尝试strHTMLCode = RegEx.Replace(strHTMLCode)时,我得到了一个错误 – Patriotec 2010-07-25 06:35:17

+0

这个不会替换,只是匹配如果有RegEx.Match()方法,这应该返回所有src或href标签任何xhtml文档 – Tim 2010-07-25 06:47:13

+0

好的,我使用基准参考标签解决了这个问题。w3schools.com:http://www.w3schools.com/tags/tag_base.asp。谢谢大家的帮助 – Patriotec 2010-07-25 07:33:15

2

不知道的语言,你可以使用的(也许最便携的)替换修饰符:

s/^(src=")([^"]+")$/$1www\.example\.com\/$2/

这应该做到以下几点:1 (并将其捕获到变量$ 1中) 2.一个或多个非双引号(“)字符后接”(并将其捕获到变量$ 2中) 3.替代'www.example .com /'在两个捕获组之间。

根据不同的语言,您可以将其包装在一个条件中,该条件检查域的存在并替换它是否未找到。

检查域名:/www\.example\.com/i应该做的。

编辑:看评论:

对于PHP,我想这个做不同的一点。我可能会使用simplexml。我不认为这会很好的解读,不过,这里有一个正则表达式一个...

$html = file_get_contents('/path/to/file.html'); 
$regex_match = '/(src="|href=")[^(?:www.example.com\/)]([^"]+")/gi'; 
$regex_substitute = '$1www.example.com/$2'; 
preg_replace($regex_match, $regex_substitute, $html); 

注:我还没有实际运行该调试它,它只是即兴。我会关心3件事情。首先,我不确定preg_replace如何处理/字符。不过,我认为你不关心这个问题,除非VB有类似的问题。其次,如果有可能换行符会阻碍,我可能会改变正则表达式。第三,我添加了[^(?:www\.example\.com)]位。这应该将匹配更改为任何src或href,不会有www.example.com/,但这取决于正在使用的正则表达式的类型(POSIX/PCRE)。

其余的更改应该没问题(我添加了href =“并且还使其不区分大小写(\ i),并且要求将其设置为全局(\ g),否则它只会匹配一次)。

我希望帮助。

+0

我将如何设置这个,所以它会一次改变所有的html使用vbscript这个(不要问) strHTML =所有缓存HTML代码 strDomain =域名 设置RegEx =新RegExp RegEx.Pattern =“s/^(src =”)([^“] +”)$/$ 1strDom艾因\/$ 2 /” RegEx.Multiline =真 RegEx.Global =真 newstrHTML = RegEx.Replace(strHTML中) 如何设置了VBScript中的正则表达式如果未在目录呈现给刚刚替补域。我根本不擅长正则表达式。 TIA – Patriotec 2010-07-25 05:12:25

+0

我说实话,我从来没有用过vb。另外,我在查看代码时遇到了麻烦,您能否使用代码块编辑您的问题以更好地查看它?还有一件事,我会将尾部/添加到strDomain变量(如果我正确读取的话)。那么你将不会有任何奇怪的逃避需求。 – Tim 2010-07-25 05:16:59

+0

我想我们不能在评论部分使用换行符。我会在我的网站上发布一个纯文本文件,以便您可以看到我在说什么“http://www.genxts.com/regex.txt – Patriotec 2010-07-25 05:42:47