这个文章很靠谱,我实际使用过。
关键是简单。
最近玩了一把 Boost 中的 Regex 库,发现网上很多文章写的晦涩难懂,更让人生气的是按照其指导是做不出来的,综合几篇文章和自己的实际使用的总结,写个笔记备忘。
按照我自己的老习惯来,先直捣黄龙,能够运行实例再说,把东西做出来之后我们再来进一步的了解相关知识点。 开始吧
1,下载 Boost Release 1.44.0 的文件包,下载的位置:
然后解压缩到自己设定的位置,我这里设定就是 C:\Boost ,名称越简洁越好,以免发生意外。
2,设定 msvc 的版本跟编译器信息
可能很多人不愿意跟我一样使用这样的目录,为了方便起见,这里用 $BOOST$ 代表你的 Boost 的安装或者解压缩路径,比如在我的机器下,$BOOST$ 就等价于 C:\Boost 。
在 $BOOST$\tools\build\v2\user-config.jam 找到下面的几行:
# -------------------
# MSVC configuration.
# -------------------
# Configure msvc (default version, searched for in standard locations and PATH).
# using msvc ;
# Configure specific msvc version (searched for in standard locations and PATH).
# using msvc : 8.0 ;
#添加 Visual Studio 2010 的配置
using msvc : 10.0 : : /wd4819 /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 ;
如果是 Visual Studio 2005 就是 8.0 ,Visual Studio 2008 就是 9.0 ,这个应该没有疑问的。偷懒就直接粘贴过去吧,这个记下来也没啥用。
3,生成 bjam
$BOOST$ 目录下面,有个文件 bootstrap.bat 的批处理文件,双击或者在命令行提示符窗口中打开,稍等片刻,就会在该目录下生成 bjam.exe 以及它的 log 文件。
4,编译 Boost::Regex,注意,这里只编译 Boost::Regex 库。
到 $BOOST$ 目录下,键入 bjam --toolset=msvc --with-regex stage ,或者直接复制粘贴吧,免得麻烦。
编译生成的库文件会被在目录 $BOOST$\stage\lib 中。
比如,在我的机器上就是:
C:\BOOST\STAGE\LIB
libboost_regex-vc100-mt-1_44.lib
libboost_regex-vc100-mt-gd-1_44.lib
libboost_regex-vc100-mt-gd.lib
libboost_regex-vc100-mt.lib
同时还会生成 bin.v2 这个临时目录,可以查看一下结构,硬盘空间紧张的话,这个目录可以删除掉的,我的目录结构如下:
C:\BOOST\BIN.V2
└─libs
└─regex
└─build
└─msvc-10.0
├─debug
│ ├─link-static
│ │ └─threading-multi
│ └─threading-multi
└─release
└─link-static
└─threading-multi
5,好了,既然成功的编译成功了,下面就来运行实例。我采用的是《Beyond the C++ Standard Library: An Introduction to Boost》这本书中的实例,简单,小巧。能测试成功,就代表你这边文章没白看。我附上这本书的下载链接吧。
6,打开 Visual Studio 2010 ,接着应该在读这篇文章的各位应该驾轻就熟了。
File->New->Project->Win32 Console Application ,name 的地方取个项目名称了,我就叫:RegexDemo 好了
接着next,在Additional options 的地方,选择Empty project,我们自己弄,不要什么预编译头文件(Precompiled header)了,然后 Finish 。
7,新建一个cpp文件,把下面的代码复制到文件中,我也是直接复制原书中的例子,但是加了几行代码,不然的话,编译成功后,运行了只能看到:“Press any key to continue.....” >_< ! 太无趣了。
接下来设置 include 目录和 lib 目录,Visual Studio 2010 的设置方法有点不一样,需要在你的工程上右键属性才可以。
#include <iostream>
#include <cassert>
#include <string>
#include <boost/regex.hpp>
using namespace std;
int main()
{
// 3 digits, a word, any character, 2 digits or "N/A",
// a space, then the first word again
boost::regex reg("\\d{3}([a-zA-Z]+).(\\d{2}|N/A)\\s\\1");
std::string correct="123Hello N/A Hello";
std::string incorrect="123Hello 12 hello";
/* 原来的代码
assert(boost::regex_match(correct,reg)==true);
assert(boost::regex_match(incorrect,reg)==false);
*/
// 新添加几行玩一下。
bool b1 = boost::regex_match(correct,reg);
bool b2 = boost::regex_match(incorrect,reg);
if(b1)
{
cout << "correct!!!" << endl;
}
cout << "=======================================" << endl;
if(!b2)
{
cout << "incorrect!!!" << endl;
}
return 0;
}
F7 编译,结果自然是:========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Ctrl + F5 直接运行,看到结果了吧。至于例子不解释了,自己看书。因为这个设计到正则表达式的知识,不在本文讨论范围。
说好了的,我们运行完实例后,开始相关知识点拓展,不要急躁哈。*^_^*