用正则表达式作html2RSS服务
h2R的想法已经有了很长时间了,今天终于开始动手。
主要用的是文本匹配:
XmlNode channles=root.FirstChild;
Regex r;
Match m;
r = new Regex("href\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))\\s+\\S+\\s+title\\s*=\\s*(?:\"(?<2>[^\"]*)\"|(?<2>\\S+))",RegexOptions.IgnoreCase|RegexOptions.Compiled);
for (m = r.Match(str); m.Success; m = m.NextMatch())
{
// rst+="link=" + m.Groups[1] + "\ntitle=" + m.Groups[2]+"\n";
XmlElement oitem=xml.CreateElement("item");
XmlElement o=xml.CreateElement("title");
o.InnerText=m.Groups[2].Value;
oitem.AppendChild(o);
o=xml.CreateElement("link");
o.InnerText=m.Groups[1].Value;
oitem.AppendChild(o);
channles.AppendChild(oitem);
}
主要用的是文本匹配:
XmlNode channles=root.FirstChild;
Regex r;
Match m;
r = new Regex("href\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))\\s+\\S+\\s+title\\s*=\\s*(?:\"(?<2>[^\"]*)\"|(?<2>\\S+))",RegexOptions.IgnoreCase|RegexOptions.Compiled);
for (m = r.Match(str); m.Success; m = m.NextMatch())
{
// rst+="link=" + m.Groups[1] + "\ntitle=" + m.Groups[2]+"\n";
XmlElement oitem=xml.CreateElement("item");
XmlElement o=xml.CreateElement("title");
o.InnerText=m.Groups[2].Value;
oitem.AppendChild(o);
o=xml.CreateElement("link");
o.InnerText=m.Groups[1].Value;
oitem.AppendChild(o);
channles.AppendChild(oitem);
}
比如str= <tr><td><tr height=19><td align=center width=14><img src=/icons/info/dot_h.gif width=5 height=5></td><td align=left><a href=/zzh/30630.nsf/(AllDocsByUnid)/C81ECBA70F9A8795C82570990031DE28?opendocument target=_blank title="IC卡学生证及纸制学生证招领名单">IC卡学生证及纸制学生证招领名单</a></td><td align=right width=80><font color=#000066>10-13 18:04</font></td></tr><tr height=19><td align=center width=14><img src=/icons/info/dot_h.gif width=5 height=5></td><td align=left><a href=/zzh/30630.nsf/(AllDocsByUnid)/81BF13BCCAB992A1C825709900300465?opendocument target=_blank title="关于“SRT计划项目优秀奖”申报的通知">关于“SRT计划项目优秀奖”申</a></td><td align=right width=80><font color=#000066>10-13 17:44</font></td></tr><tr height=19><td align=center width=14><img src=/icons/info/dot_h.gif width=5 height=5></td><td align=left><a href=/zzh/30630.nsf/(AllDocsByUnid)/713C777073ED05DBC8257099002FE71B?opendocument target=_blank title="新一轮SRT立项申请通知">新一轮SRT立项申请通知</a></td>
正则表达式如是解析:
1、href\\s*=\\s*
匹配href,其后面的=两侧有没有空格、有几个空格都可以。
2、(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))
摘取数据1,即link,其两侧有没有引号都可以。
3、\\s+\\S+\\s+
匹配至少一个空各,紧接着至少一个非空格,紧接着至少一个空各。
其实匹配的是 target=_blank
正在继续作。
发现正则表达式太强了,简直就是文本处理的SQL,比SQL还强!
现在觉得,不知自己是为了实现h2R服务而学习Regex,还是为了学习Regex而拿h2R服务做练习。
都挺好。
posted on 2005-10-16 22:07 civ3's .NET studying 阅读(656) 评论(1) 编辑 收藏 举报