因一个小软件要用到正则表达式来搜索,在百度搜索了下VC6.0下用的正则表达式库,最后决定采用boost.
第一步当然是安装,编译boost,.
在boost官网下载了1.49版的,但编译不通过,于是下了个1.34版的,参考:yysdsyl的文章:<<配置boost库使用正则表达式>>来配置,将下载的解压到d盘boost目录.进入d:/boost/libs/regex/build,建立一个批处理CMD.BAT.里面就写一句CMD.EXE.双击运行,把VC6.0安装目录下的VC98/Bin/VCVARS32.BAT文件拖到刚才打开的CMD窗口,回车.然后在CMD窗口中输入命令“nmake -fvc6.mak”,等待几分钟编译完成后在d:/boost/libs/regex/build多了一个vc6的文件夹,里面是很多lib和dll文件.把vc6下的所有lib和dll文件拷贝到Visual Studio安装目录下的VC98/boostRex(boostRex是自己建的).
打开vc6.0选择“Tools->Options->Directories->Include files,加入一行"d:/BOOST",选择Library file"加入一行d:/PROGRAM FILES/MICROSOFT VISUAL STUDIO/VC98/BOOSTREX(我的VC装在D盘).经过这样的设置后就可以正确使用boost的正则表达式库了.
第二步是写个小实例来测试下,我是建的MFC的对话框程序来试的,
加入头文件
#include <boost/regex.hpp>
在对话框窗口上建一个按钮,写下于下代码
boost::regex expression("select ([a-zA-Z]*) from ([a-zA-Z]*)");
CString in = "select gm from tab select name from table";
CString sRet;
boost::cmatch what;
if(boost::regex_search(LPCSTR(in), what, expression))//CString转string
{
for(int i=0;i<what.size();i++){
sRet = what[i].str().c_str();//string转CString
MessageBox(sRet);
}
}
else
{
MessageBox("Error Input");
}
测试正常,再进行一个搜索重复文本的测试,加入头文件:
#include <string>
代码如下:
boost::regex reg("<html>(.+?)b(.+?)</html>");
std::string s="<html>123bccc</html><html>456b789</html>";
boost::smatch what;
std::string::const_iterator start = s.begin();
std::string::const_iterator end = s.end();
CString sRet;
while( boost::regex_search(start, end, what, reg) )
{
for(int i=0;i<what.size();i++){
sRet = what[i].str().c_str();
MessageBox(sRet);
}
start = what[0].second;
}
测试正常.
3361



被折叠的 条评论
为什么被折叠?



