大家只要知道这是什么就可以了,Boost中的正则表达式库!
貌似是现在解析正则表达式效率最高的库了,也许有人单独用Regex++,这其实就是Boost中的Regex库,只不过作者单独提供,不知道为什么(懒得探究了),这个库我没法编译,提示Makefile语法有错,未知。。。

正则表达式很适合处理和字符串有关的工作,比如匹配,验证,搜索等等。。。
不了解的朋友可以百度一下相关的资料。。。值得一学!^_^

好了,这里总结一下我的编译过程,互相交流。
因为现在只想使用Regex库(要支持Unicode),其他的Boost库暂时不用(全部编译花了我4.5G,还没编译完。。。),所以进行单独编译。

1. 因为我主要使用Unicode编码的字符串。所以要Regex支持Unicode,这里需要ICU,从Sourceforge下载(http://nchc.dl.sourceforge.net/sourceforge/icu/icu4c-4_0-src.zip)(需要的话,还有帮助文档)

2. 编译ICU,比较简单,解压,打开source"allinone子目录下的allinone.sln项目文件,附带的是VS2005的,这里需要升级到2008,一般没什么问题,然后直接编译,Debug或者Release的,看你需要了,之后在lib目录下能够找到库文件,bin目录下有dll文件(动态库编译)。

小提示:因为我之前使用STLPort替换MS的STL,所以第一次编译出了点问题,应该是设置的问题,没有深究,改成原来MS的STL,就可以了。

3. 解压Boost

4. 使用bjam。你可以自行编译bjam,我这里直接使用编译好的版本。(之前使用nmake编译,成功了,但是编译之后的库文件的命名为1.38.0的,可能是作者疏忽,如果自己改的话,麻烦,不如直接重新编译,使用bjam就没有这个问题)
放到解压后的Boost文件夹中的libs"regex"build子文件夹,因为bjam要使用这里的Jamfile.v2文件单独编译Regex

5. 打开cmd(如果后面编译失败,可以尝试使用管理员身份运行)

6. 给命令行编译器设置环境变量,直接调用Visual Studio 2008目录中的配置文件,在Common7"Tools子目录中的vsvar32.bat
我的是:E:"Program Files"Microsoft Visual Studio 9.0"Common7"Tools"vsvar32.bat
直接在cmd里粘贴"E:"Program Files"Microsoft Visual Studio 9.0"Common7"Tools"vsvar32.bat”
注意要包含双引号,因为我这里的路径有空格,如果你的也是,就要用双引号括起来

7. 不停地cd进入到解压后的Boost文件夹中的libs"regex"build子目录,调用如下命令
bjam –sICU_PATH=icupath threading=multi link=shared,static runtime-link=static
因为我使用多线程,所以就编译线程安全的multi库,要编译单线程的,用single参数
icupath是指icu的解压目录(不是ICU编译后的lib目录,lib目录bjam会自己定位),如果这里也包含空格,同样的,也要使用双引号括起来

8. 等待一会,就会编译完成,在Boost的解压目录中的bin.v2"libs"regex"build"msvc-9.0子目录中就会找的编译好的文件,lib和dll等,而且分类存放了起来
为了使用方便,我做了如下调整,将所有文件直接存放到bin.v2"libs"regex"build"msvc-9.0下自己新建的lib文件夹里,需要连接什么文件regex的头文件清楚,我们只需指定必要的宏就可以了

9. 配置Visual Studio 2008。将刚才自己创建的lib子目录添加进VS的库文件的搜索路径,然后将解压后的Boost路径添加进VS的包含文件的搜索路径,即可

10. 开一个win32的小项目regextest测试一下,代码如下:

#include "stdafx.h"

#include <iostream>

#include <boost/regex.hpp>

int _tmain(int argc, _TCHAR* argv[])

{

     boost::wregex a(L"""d{4}");

     if(boost::regex_match(L"1325",a))

     {

         std::cout<<"yes"<<std::endl;

     }

     else

     {

         std::cout<<"no"<<std::endl;

     }

     return 0;

}


编译连接通过,测试结果:yes

 

有什么问题的话,我们互相交流^_^

posted on 2009-06-19 14:39  2356  阅读(1261)  评论(0编辑  收藏  举报