GRETA 正则表达式库
主 页 产 品 文 章 团 队
..:: Greta ::..
 
  [原创文章,转载请保留或注明出处:http://www.nk975.com/sswater/zh/greta/index.htm]  
 
      GRETA 为 C++ 提供了兼容 Perl 5 的正则表示支持。GRETA的主页位于:http://research.microsoft.com/projects/greta/。今天,我们并不讨论正则表达式本身以及 Greta 与其他正则表达式之间有什么不同,因为这方面的资料很多。我将主要介绍怎样在 Visual C++ 中正确的使用 Greta,举例一步一步进行说明:  
 

下载
 
      请在 GRETA 主页 上下载源代码来使用。比如:GRETA 2.6.4 for VC6,你将得到压缩文件:'greta-2.6.4-vc6.zip'。也可以从本站下载源代码  
      请不要下载 lib 形式的 Greta 库。在很多网站上你可能找得到类似 greta.lib 的 lib 库,但是这种 lib 版本并不一定满足你的需求,或者可能产生连接错误。  
 

使用
 
      GRETA 库中一共有 6 个程序文件:
  • regexpr2.h
  • regexpr2.cpp
  • syntax2.h
  • syntax2.cpp
  • restack.h
  • reimpl2.h

    可以有两种方法使用:
    (1) 直接把这6个文件加入到 project 中。(不推荐)
    (2) 在 workspace 中专门为 Greta 创建一个类型为:'Win32 Static Library' 的 project 。

 
 

第1种:直接加入 Project (强烈不推荐)
 
      强烈不推荐直接将 greta 的文件直接加入 project。你如果一定要这么做,请注意一下,如果你的项目使用了 precompiled header,请注意添加 #include "stdafx.h" 到 regexpr2.cpp 和 syntax2.cpp 中。  
 

第2种: 创建一个 'Win32 Static Library' 类型的 Project
 
  将一步一步说明:

第一步:创建一个空的 workspace。例如起名 'Test':


第2步:创建主项目,这个项目将使用 Greta。例如控制台类型,起名 'Main':


第3步:创建 greta 项目。选择 'Win32 Static Library' 类型。并且将它作为 'Main' 的依赖。按 OK 以后,不选择 'Pre-Compiled header' 和 'MFC Support'。


第4步:将下载下来的 zip 包中的 6 个文件放入 greta 的目录中,并添加到 greta 项目中来:


第4步:从帮助文件中复制一个例子程序到主项目中来。帮助文件就是下载的 greta 压缩包中的 htm 文件。注意要使用 #include "..\greta\regexpr2.h"。选择 'Main' 为活动 project,然后编译并运行:


你将得到运行结果:


目前为止,我们已经成功完成了一个使用 greta 的项目。[下载本页中的例子程序]

如果你需要 UNICODE 版本,或者你使用 greta 的程序是 dll,那么请继续下面的章节。
 
 
 
..:: 高级 ::..
 

1. UNICODE 版本
 
  如果你使用 greta 的项目是 UNICODE 版本,那么 greta 项目也必须是 UNICODE 版本。举例说明:

第1步:给 greta 项目添加一个 'Unicode Debug' 配置:


第2步:在项目设定中,添加 '_UNICODE' 和 'UNICODE' 两个预定义宏。(C/C++, General, Preprocessor defininitions)


第3步:重复前两步,则可以为 Release 和主项目都添加上相应的 Unicode 版本。
 
 

2. Runtime library
 
  在很多种情况下,特别是在主项目是 dll 时,你需要确认一下 greta 项目和主项目使用相同的 runtime library,否则你可能会得到一个连接错误。

第1步:首先确定主项目使用哪一个 runtime library:


第2步:在同样的位置,修改 greta 项目,使 greta 项目使用的 runtime library 与主项目一致。这样,你就可以正确的连接了。
 
 

3. 为什么不推荐下载 greta.lib
 
      问:为什么不推荐下载 greta.lib 以及为什么会有连接错误?  
      答:就是基于前面所说的两点原因。因为下载下来的 lib 文件,是否是 UNICODE 版本未知,使用哪一个 runtime library 也是未知,因此不一定与你的主项目一致,如果不同就会产生连接错误。  
 
 
..:: 相关链接 ::..