正则表达式验证a中的href和从相对路径转到绝对路径

还是在继续蛛蛛的问题

今天遇到两个问题

1:正则表达式验证a中的href 链接问题

2:从绝对路径转到相当路径的问题

办法:

1:要想从a中得到完整的链接还真有点难度 要考虑的问题是:有很多页面不是绝对路径的而是相对路径的 这个没有什么共同的地方 不好用正则表达式去匹配它 我是怎样搞的呢 思路:将全部带有链接的标记找到 例如:<a href="http://www.madeinchina.cn">中国制作</a> 还有像这样的 <a href="/product/list.aspx">产品列表</a> 正则表达式是:string regs="(<a .+?a>)|(<a.+?a>)";用这个完整匹配就行了.

代码如下:

string url = "http://www.madeinchina.cn"; System.Net.HttpWebRequest httpReq; System.Net.HttpWebResponse httpRes; System.Uri httpURL = new Uri(url); httpReq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(httpURL); httpReq.Method = "GET"; httpRes = (System.Net.HttpWebResponse)httpReq.GetResponse(); httpReq.KeepAlive = false; System.IO.StreamReader sReader = new System.IO.StreamReader(httpRes.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")); string res = sReader.ReadToEnd(); //以下是利用正则表达式对获取的文本流进行过滤 string strRegex = "(<a .+?a>)|(<a.+?a>)"; System.Text.RegularExpressions.Regex r; System.Text.RegularExpressions.MatchCollection m; r = new System.Text.RegularExpressions.Regex(strRegex, System.Text.RegularExpressions.RegexOptions.IgnoreCase); m = r.Matches(res); string vs = ""; Response.Write("该页共有" + m.Count + " 个超连接<br/>"); for (int i = 0; i < m.Count; i++) { Response.Write(m[i].Value + "<br/>"); }这是第一步

第二步得到href中的值:

代码一样 但是正则表达式不同 正则表达式是:string strRegex = "(href.+?/".+?/")|(href.+?/'.+?/')";

这样得到的效果就是 href="http://www.madeinchina.cn" 或者是: href="/product.aspx";

不还是没有得到想要的效果吗? 用asp.net的replace方法代替不要的值

方法如果:

//得到源文件 List<string> lists = new List<string>(); //用正则表达式匹配 string strReg = "(href.+?/".+?/"){1}|(href.+?/'.+?/'){1}";//要验证的正则表达式 System.Text.RegularExpressions.Regex r; System.Text.RegularExpressions.MatchCollection m; r = new System.Text.RegularExpressions.Regex(strReg,System.Text.RegularExpressions.RegexOptions.IgnoreCase); m = r.Matches(res); //将m对象转换成list对象 if (m != null) { for (int i = 0; i < m.Count; i++) { string value = m[i].Value.Replace("href", "").Remove("/"", "").Replace("'", "").Replace("=", "").Trim(); lists.Add(value);//这里全部的a全部标记 } return lists; } return null;

这样就成了href中的信息了!

第二个问题办法是:

将相对路径转换成绝对路径的办法是:

这个原来是想要逻辑自己写的 发现真的很麻烦 结果呢找了找 有好的办法 代码如下

Uri basepager = new Uri(NowsUrl); Uri sonpager = new Uri(basepager, oldstring); return sonpager.ToString();

好了 不早了 睡了 明天晚上继续我的蛛蛛!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值