最近做数据库涉及到解析sql语句,觉得最好的办法是写正则表达式解析,由于vc2005没有解析函数,自己写又不甘心,后来从网上找到了boost库,解决了这个问题.
boost下载地址:http://www.boost.org

boost库安装比较麻烦,需要自己编译源文件,我整理了一下,如果仅仅需要做正则表达式,按下面的代码敲就行了.

cd D:\boost_1_39_0\libs\regex\build
d:
nmake -f vc8.mak
nmake -f vc8.mak install

注 意,别看下载下来的数据包没有多大,解压缩之后达到了100多M,编译完之后更大,所以安装时一定注意空出足够的空间,敲入 nmake -f vc8.mak后等待的时间比较长,屏幕上还会出现一大堆英语,可以不做考虑.按照步骤往下敲就行了.压缩包内文档很详细,参照文档继续就可以了.

在VC9中集成:工具->项目和解决方案->VC++目录 配置相应的加载类库等目录就可以
加入:D:\boost_1_39_0

编写一个源程序测试一下:

#include "stdafx.h"
#include <cstdlib>
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
#include <iostream>

using namespace std;
using namespace boost;

regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");

int main(int argc, char* argv[])
{


        std::string in;
        cmatch what;
        cout << "enter test string" << endl;
        getline(cin,in);
        if(regex_match(in.c_str(), what, expression))
        {
                for(int i=0;i<what.size();i++)
                        cout<<"str :"<<what[i].str()<<endl;
        }
        else
        {
                cout<<"Error Input"<<endl;
        }
   return 0;
}

输入: select name from table
输出: str:select name from table
         str:name
         str:table

 

注意:连接的时候可能出现“LINK : fatal error LNK1104: 无法打开文件“libboost_regex-vc80-mt-s-1_39.lib”的错误,解决办法C:\Program Files\Microsoft Visual Studio 8\VC\lib下的libboost_regex-vc80-mt-s-1_38.lib复制一份,重命名为libboost_regex-vc80-mt-s-1_39.lib就可以了!

posted on 2009-09-26 10:51  Berkeley  阅读(374)  评论(0编辑  收藏  举报