civ3

编程好玩

导航

用正则表达式作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);
            }

比如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><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><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><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  阅读(652)  评论(1编辑  收藏  举报