PRCE8.10及其C++封装完整搞定_VS2008

     boost的regex 是还不错,就是太大了,链接化的时间太长,而且从网络了解的情况来看,还有写不太可靠!,于是转向伟大的PCRE。于是上网爬,看了好些网友的前车之见,直接开干!

 

      取PCRE的服务器上下载最新的8.10版本,ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/解压后,查看其NON-UNIX-USE文件,里面有详细的非UNIX编译步骤。
按照说明将
               config.h.generic->config.h
               pcre.h.generic->pcre.h
      在VS2008中建立一个空的Wi32 DLL工程,将config.h,pcre.h,ucp.h,pcre_internal.h拷贝到vs2008的Win32 DLL工程目录中(不要加入工程中,否则编译器会先pcre_internal.h(在各个pcre_*.c文件中,都是必须先编译config.h的),报莫名的错误)。之后考入所有的prce_*.c文件(将pcre_chartables.c.dist->pcre_chartables.c后也一起考入)。
      打开config.h,在其头部加入:  

      #define NO_RECURSE   

      #define HAVE_STDINT_H 0

      #define HAVE_INTTYPES_H 0

 

      #define NO_RECURSE 的意思是让PCRE不要用递归,而是用堆辅助工作,这样可以避免PCRE一次解析大量字符串时栈崩溃。

      #define HAVE_STDINT_H 0 #define HAVE_INTTYPES_H 0 的意思是让pcre_internal.h中关闭,如下选项:

 

 

#if HAVE_STDINT_H

#include <stdint.h>

#elif HAVE_INTTYPES_H

#include <inttypes.h>

#endif

 

      在项目选项C++->Preprocessor中的Preprocessor Definitions中加入HAVE_CONFIG_H;_CRT_SECURE_NO_WARNINGS,由于PCRE还是用C的那套老字符串函数,而从VS2005以后,都要用*_s的安全函数,否则就要提升一堆warning,本人一向讨厌warning

,所以就加了。另外感觉PCRE非要搞HAVE_CONFIG_H这个选项,感觉有点多余,所有的C函数前面都有这个宏判断,多余!

      这样就好了,一次编译通过。

    (本人尝试把PRCE的各种CC及其对应的.h文件也加入工程,但是发现由于操作系统和编译环境的差异,各种错误很多,搞了半天也没有完全搞定,时间有限就不搞了。)

 

      好了,加入这个时候假如直接用PCRE提供的C API来写程序,太痛苦了,于是在网上爬各种PCRE对应的C++ Wrapper:

     http://www.adp-gmbh.ch/cpp/regexp/pcre/wrapper/index.html 这位老兄搞一个最简单的版本,功能还是差点。

     http://pme.berlios.de/ 有PME的最新版本2.0.0,下载下来,将PME.h和PME.cpp也加入工程中,进行编译,发现其提供的其提供的例子都不能运行通过,跟踪代码发现其代码match函数内有一个大bug(直接吐血!!,这位仁兄在上传时也不搞清楚),m_marks数组居然不判断是否为空,就开整!,修改bug后运行其例子,终于可以用了。

     http://www.daemon.de/PCRE  pcre++这个封装类,看了一下其代码,非要把一个class的内容分为多个.cc文件,搞的巨复杂,于是耐心修改,而后将其浓缩为2个文件后加入工程中,费了2个多小时的时间终于,FIX了所有的errors和warnings。

     真个过程中遇见了一个变态的警告(warning C4251: needs to have dll-interface to be used by clients of class)和错误(error C2470 "looks like function definition, but no parameter list),搞了好一会才搞定,要移植unix下的开源东东来windows上免费用,也不是那么容易啊,这就是现实。

     好了,搞定了,可以在perl流派的正则表达式里面爽了!。。。。。。。。。。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值