首页 |缤纷校园 |心理援助 |英语世界 |公务员 |考研天地 |资格考试 |电脑认证 |免费论文 |实用文档 |求职就业 |论坛 |网络课堂 |留言版
 电脑认证首页     考试专题 考试提醒 计算机等级考试 计算机认证水平考试 IT认证 论坛
 最近更新
· [计算机专题]GRETA正则表达式模板类库
· [学习辅导]2007年WindowsXP怎样节省内…
· [学习辅导]警惕磁盘精灵蠕虫新变种通…
· [学习辅导]Win2000路由的安装与设置实…
· [学习辅导]微软证书邮寄的新规定
· [学习辅导]微软欲继续保持强大Vista需…
· [计算机专题]Windows与OpenSolaris将实…
· [学习辅导]QQ聊天避开木马病毒攻击的…
· [计算机专题]网络工程师讲解安全漏洞的…
· [计算机专题]用CTBS实现公安系统信息大…
 精品课程
· [精品课程推荐]08年投资项目管理师考…
· [精品课程推荐]08年职称日语考试辅导…
· [精品课程推荐]08年环境影响评价师辅…
· [精品课程推荐]08年质量资格考试辅导…
· [精品课程推荐]08年会计职称辅导报精…
· [精品课程推荐]08年建筑师考试辅导京…
· [精品课程推荐]08职称英语考试辅导王…
· [精品课程推荐]08年咨询工程师考试名…
· [精品课程推荐]08年监理工程师考试辅…
· [精品课程推荐]经济师考试网上辅导报…
 考试动态
· [二级考试动态]北京:2007年9月计算机等级…
· [二级考试动态]2007年12月全国计算机职业…
· [二级考试动态]青岛:2008年上半年计算机…
· [二级考试动态]宁夏:2007年9月计算机等级…
· [二级考试动态]北京地区计算机等级考试10…
· [二级考试动态]北京:07年下半年计算机等…
· [二级考试动态]2008年4月全国计算机等级考…
· [二级考试动态]2007年下半年计算机等级考…
· [二级考试动态]天津:2007年下半年全国计…
· [二级考试动态]计算机技术与软件专业技术…
 试题下载
· [试题下载]2007年计算机等级考试二级…
· [试题下载]2007年9月计算机等级考试二…
· [试题下载]2007年9月二级VB试题答案
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机二级VF模拟…
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机等级考试二…
· [试题下载]VC++中利用/GS开关防止缓冲…
· [试题下载]2007年4月计算机等级考试二…
 学习辅导
· [学习辅导]2007年计算机二级VF编辑
· [学习辅导]2007年C语言辅导:可移植性
· [学习辅导]2007年制作风格独特的按钮
· [学习辅导]2007年VFP中使用Grid控件设…
· [学习辅导]MoreEffectiveC++之考虑变…
· [学习辅导]C++/CLI解析之基于堆栈的对…
· [学习辅导]C++builder的文件读写操作…
· [学习辅导]C++类对象的复制-拷贝构造…
· [学习辅导]C++基本数据类型与输入输出
· [学习辅导]C++程序设计之四书五经
 

GRETA正则表达式模板类库

文章录入:admin    责任编辑:admin   2008-1-7 16:37:27  来源:中国青年报  点击数:
 

  本文摘要翻译了几篇文章的内容,简单介绍 ATL CAtlRegExp,GRETA,Boost::regex 等正则表达式库,这些表达式库使我们可以方便地利用正则库的巨大威力,给我们的工作提供了便利。

  正则表达式语法 字符元意义.匹配单个字符[ ]指定一个字符类,匹配方括号内的任意字符。例:[abc] 匹配 "a", "b"或 "c"。^如果^出现在字符类的开始处,它否定了字符类,这个被否定的字符类匹配除却方括号内的字符的字符。如:[^abc]匹配除了"a", "b"和"c"之外的字符。如果^出现在正则表达式前边,它匹配输入的开头,例:^[abc]匹配以"a", "b"或"c"开头的输入。-在字符类中,指定一个字符的范围。例如:[0-9]匹配"0"到"9"的数字。?指明?前的表达式是可选的,它可以匹配一次或不进行匹配。例如: [0-9][0-9]? 匹配"2"或"12"。+指明?前的表达式匹配一次或多次。例如:[0-9]+匹配"1", "13", "666"等。

  指明*前的表达式匹配零次或多次。??, +?, *??, +和*的非贪婪匹配版本,它们尽可能匹配较少的字符;而?, +和*则是贪婪版本,尽可能匹配较多的字符。例如:输入"<abc><def>", 则<.*?> 匹配"<abc>",而<.*>匹配"<abc><def>"。( )分组操作符。例如:(d+,)*d+匹配一串由逗号分开的数字,例如: "1"或"1,23,456"。转义字符,转义紧跟的字符。例如,[0-9]+ 匹配一个或多个数字,而 [0-9]+ 匹配一个数字后跟随一个加号的情况。反斜杠也用于表示缩写,a 就表示任何数字、字母。如果后紧跟一个数字n,则它匹配第n个匹配群组(从0开始),例如,<{.*?}>.*?</>匹配"<head>Contents</head>"。注意,在C++字符串中,反斜杠需要用双反斜杠\来表示: "\+", "\a", "<{.*?}>.*?</\0>"。$放在正则表达式的最后,它匹配输入的末端。例如:[0-9]$匹配输入的最后一个数字。|间隔符,分隔两个表达式,以正确匹配其中一个,例如:T|the匹配"The" 或"the"。


  缩写匹配

  缩写匹配a字母、数字([a-zA-Z0-9])空格(blank): ([ \t])c字母([a-zA-Z])d十进制数 ([0-9])h十六进制数([0-9a-fA-F]) 换行: ( |( ? ))q引用字符串("[^"]*")|(''''[^'''']*'''')w一段文字 ([a-zA-Z]+)z一个整数([0-9]+)
  ATL CATLRegExp

  ATL Server常常需要对地址、命令等复杂文字字段信息解码,而正则表达式是强大的文字解析工具,所以,ATL提供了正则表达式解释工具。

  示例:

#include "stdafx.h"
#include <atlrx.h>
int main(int argc, char* argv[])
{
  CAtlRegExp<> reUrl;
  // five match groups: scheme, authority, path, query, fragment
  REParseError status = reUrl.Parse(
    "({[^:/?#]+}:)?(//{[^/?#]*})?{[^?#]*}(?{[^#]*})?(#{.*})?" );
  if (REPARSE_ERROR_OK != status)
  {
   // Unexpected error.
   return 0;
  }
  CAtlREMatchContext<> mcUrl;
  if (!reUrl.Match(
  "http://search.microsoft.com/us/Search.asp?qu=atl&boolean=ALL#results",
   &mcUrl))
  {
   // Unexpected error.
   return 0;
  }
  for (UINT nGroupIndex = 0; nGroupIndex < mcUrl.m_uNumGroups;
    ++nGroupIndex)
  {
   const CAtlREMatchContext<>::RECHAR* szStart = 0;
   const CAtlREMatchContext<>::RECHAR* szEnd = 0;
   mcUrl.GetMatch(nGroupIndex, &szStart, &szEnd);
   ptrdiff_t nLength = szEnd - szStart;
   printf("%d: "%.*s"
", nGroupIndex, nLength, szStart);
  }
}   输出:0: "http"
1: "search.microsoft.com"
2: "/us/Search.asp"
3: "qu=atl&boolean=ALL"
4: "results"
  Match的结果通过第二个参数pContext所指向的CAtlREMatchContext类来返回,Match的结果及其相关信息都被存放在CAtlREMatchContext类中,只要访问CAtlREMatchContext的方法和成员就可以得到匹配的结果。CAtlREMatchContext通过m_uNumGroups成员以及GetMatch()方法向调用者提供匹配的结果信息。m_uNumGroups代表匹配上的Group有多少组,GetMatch()则根据传递给它的Group的Index值,返回匹配上的字符串的pStart和pEnd指针,调用者有了这两个指针,自然可以很方便的得到匹配结果。

  更多内容请参阅: CAtlRegExp Class

  GRETA

  GRETA是微软研究院推出的一个正则表达式模板类库,GRETA 包含的 C++ 对象和函数,使字符串的模式匹配和替换变得很容易,它们是:

  • 上一个文章:

  • 下一个文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    关于本站 - 广告服务 - 站内导航 - 网站声明 - 友情链接 - 联系我们
    Copyright©2003-2008 www.dastu.com, All Rights Reserved.

    心语心愿科技(北京)有限责任公司 版权所有

    鄂ICP备05000022号