Chinaunix首页 | 论坛 | 博客
  • 博客访问: 721354
  • 博文数量: 33
  • 博客积分: 10012
  • 博客等级: 上将
  • 技术积分: 1365
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-15 09:11
文章分类
文章存档

2009年(10)

2008年(23)

我的朋友

分类: C/C++

2008-07-10 16:20:30

从网上找到一个元宝  Bux.to挂机程序代码,他是使用c#在.net环境下实现的,很想看看使用别的语言也给实现下,网页cookie和session什么的原来写过文章实现过了.比较简单.看看他的网页链接提取部分使用的是.net提供的正则表达式.Regex,Qt里面也提供了个正则表达式的实现QRegex.
微软的这个正则表达式多了个功能,就是把提取的内容保存到一个数组中

private void GetAdLink(string HTMStr)
        {
            Regex r;
            Match m;
            AdUrl = new ArrayList();
            r = new Regex(@"href=(?.*)target=_blank>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
            string tmp = "";
            for (m = r.Match(HTMStr); m.Success; m = m.NextMatch())
            {
                tmp = m.Result("${AdPage}").Trim(); //地址

                if (AdUrl.IndexOf(tmp) < 0)
                    AdUrl.Add(tmp);
                // MessageBox.Show(tmp);

            }
        }



?对应的就是数组,但这个Qt里面是不支持的,Qt相应的实现如下:


   QRegExp rx("href=([^<]* ?) target=_blank>");
     rx.setCaseSensitivity(Qt::CaseInsensitive);
     rx.setMinimal(true);

   //否则就会查找到第一条,然后和最后一条的target=_blank>作为返回值
     int pos = rx.indexIn(str);
   while ((pos = rx.indexIn(str, pos)) != -1) {//str对应读取的页面数据
             ++count;
             pos += rx.matchedLength();      //继续寻找下一个匹配
         }


关于正则表达式,我觉得这个文章不错,比较通用


提取链接包括链接文字可使用如下的表达式


href=([^<]* ?) (target=_blank|target="_blank")>([^<]* ?)</a>


发觉正则表达式是个好东西,譬如我们分析国家标准gis数据交换格式时,就可以使用这个来方便的读取制定的数据。



使用以下正则表达式可读取版本号


Version:(.*\s+)





匹配mapgis的宗地文件的正则表达式

原理:以#开头,以#结尾,取#之前的记录,不取空白记录

(#([^<]*?)(?=#\S))

阅读(3926) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~