求搜索一段html代码中所有链接最佳算法!

wgqlj 2007-11-11 04:10:31
需要从一段HTML中提取所有链接的标题地址
例如
<html>
<head></html>
<body>
<a href="http://www.baidu.com">百度</a>
<a href="http://www.taobao.com">淘宝</a>
</body>
</html>
结果是
1. http://www.baidu.com 百度
2. http://www.taobao.com 淘宝
求最佳算法
我设想有三种方法:
1、正则表达式。不过这玩意我不是很懂。。。所以写不出
2、用indexof、subString等方法实现,比较麻烦,要写一大串代码。。。
3、转换为XML。代码量也不少。

求最佳算法,最好提供源代码!谢谢!
...全文
143 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgqlj 2007-11-11
  • 打赏
  • 举报
回复
当html很长的时候,对CPU的确是个考验。。。
wgqlj 2007-11-11
  • 打赏
  • 举报
回复
多谢多谢!!!
wangkun9999 2007-11-11
  • 打赏
  • 举报
回复
string RegexString = @"<a\s{0,}href= ""(?<link>.+?)"">(?<linktext>.+?)</a>"; //少了个问号了
wangkun9999 2007-11-11
  • 打赏
  • 举报
回复
你还要把链接的文字也输出来哟,随便改下就行了:

using System.Text.RegularExpressions;


string str="<html><head> </html> <body> <a href= \"http://www.baidu.com \"> 百度 </a> <a href= \"http://www.taobao.com \"> 淘宝 </a> </body> </html>";
string RegexString = @"<a\s{0,}href= ""(?<link>.+?)"">(<linktext>.+?)</a>";
string[] link = GetRegValue(str, RegexString, "link", true);
string[] linktext = GetRegValue(str, RegexString, "linktext", true);// link和linktext就是你想要的了




/// <summary>
/// 正则表达式取值
/// </summary>
/// <param name="HtmlCode">源码</param>
/// <param name="RegexString">正则表达式</param>
/// <param name="GroupKey">正则表达式分组关键字</param>
/// <param name="RightToLeft">是否从右到左</param>
/// <returns></returns>
public string[] GetRegValue(string HtmlCode , string RegexString,string GroupKey,bool RightToLeft)
{
MatchCollection m;
Regex r;
if (RightToLeft == true)
{
r = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.RightToLeft);
}
else
{
r = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Singleline);
}
m= r.Matches(HtmlCode);
string[] MatchValue = new string[m.Count];
for (int i = 0; i < m.Count; i++)
{
MatchValue[i] = m[i].Groups[GroupKey].Value;
}
return MatchValue;
}





wangkun9999 2007-11-11
  • 打赏
  • 举报
回复
当然用正则如较好了,其它两种方法都不能完整的解决问题,其实正则也不难,你说的就是一个正则分组的应用吗,随便写了一段(最近回答正则的问题比较多,所以也比较顺手^_^):

using System.Text.RegularExpressions;


string str="<html><head> </html> <body> <a href= \"http://www.baidu.com \"> 百度 </a> <a href= \"http://www.taobao.com \"> 淘宝 </a> </body> </html>";
string RegexString = @"<a\s{0,}href= ""(?<link>.+?)"">.+?</a>";
string[] link = GetRegValue(str, RegexString, "link", true);
Response.Write(link.Length);


/// <summary>
/// 正则表达式取值
/// </summary>
/// <param name="HtmlCode">源码</param>
/// <param name="RegexString">正则表达式</param>
/// <param name="GroupKey">正则表达式分组关键字</param>
/// <param name="RightToLeft">是否从右到左</param>
/// <returns></returns>
public string[] GetRegValue(string HtmlCode , string RegexString,string GroupKey,bool RightToLeft)
{
MatchCollection m;
Regex r;
if (RightToLeft == true)
{
r = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.RightToLeft);
}
else
{
r = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Singleline);
}
m= r.Matches(HtmlCode);
string[] MatchValue = new string[m.Count];
for (int i = 0; i < m.Count; i++)
{
MatchValue[i] = m[i].Groups[GroupKey].Value;
}
return MatchValue;
}

ruguo_58 2007-11-11
  • 打赏
  • 举报
回复
虽然我对正则表达式也不在很在行,但比较好用,据说也不很难.
ojekleen 2007-11-11
  • 打赏
  • 举报
回复
mark

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧