正则问题,重大疑惑!
www.xaonline.com
提取这个网站首页HTML代码。替换所有相对连接为绝对连接。以便在本机正确显示。
例如:
把
<a href= "news/123.html "> 新闻 </a>
替换成
<a href= "http://www.xaonline.com/news/123.html ">
下面正则替换成功!
Uri uri = new Uri( "http://www.xaonline.com ");
MatchCollection mc;
mc = Regex.Matches(str,@ " <(\w+)([^> ]+)href\s*=\s*[\ " "]([^\ " "]+)[\ " "]([^> ]*)> ",RegexOptions.IgnoreCase);
for(int i=0;i <mc.Count;i++)
{
str = str.Replace(mc[i].Groups[3].Value,new Uri(uri,mc[i].Groups[3].Value).ToString());
}
虽然替换成功,但是有个问题,为什么有些HTML标记中的类似 color、bgcolor 属性都被改了呢 ??
字体颜色也被改了,如下错误;
<font color= "#ffcc00 "> 被改成了 <font color= "http://www.xaonline.com/#ffcc00 ">
单元格颜色也被改了。如下错误
<td height= "17 " align= "center " bgcolor= "http://www.xaonline.com/#ffffff ">
有些样式中的color 也被改了 如下错误
.style1 {color: http://www.xaonline.com/#FF0000}
最后采集到的整个网页都成了兰色背景了 晕啊!到底怎么回事情了??正则中我也没有匹配颜色啊!
------解决方案--------------------string yourStr = ......;
string resultStr = Regex.Replace(yourStr, "( <.+?=\ ")(.*/.*\ ".+?> ) ", "$1http://www.xaonline.com/$2 ", RegexOptions.IgnoreCase);
你的问题在于替换了所有双引号之间的东西,但是双引号之间的不一定是链接,还可能是属性值(其实链接也是属性值),所以,要替换所有“看起来像”链接的字符串,因此,我替换了所有包含 "/ "的字符串。