VC6.0下配置boost库使用正则表达式

韩东阳在路上

韩东阳在路上

2016-02-19 20:12

下面是个简单易学的VC6.0下配置boost库使用正则表达式教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

最近做开发碰到了长字符串匹配、搜索的问题,最先想到的是使用正则表达式,简单、高效。

但是我用的开发工具是VC6.0,不支持正则表达式。

上网baidu一下,发现支持正则的库还真不少,大概有以下几种:boost,GNU,VC7带的ATL中的和微软发布的greta。

网上的朋友对boost评价不错,决定就使用是它了!

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

1、接下来的就是下载boost库,网上很好找。我下载的是压缩包,20多M,解压后将近100多M。

我解压的目录是D:oost

2、然后是编译,我只要支持正则表达式就可以,因此只需要编译D:oostlibsegexuild目录下的文件。据说全部编译要花将近2个小时,没有验证过,在我家里的机器上编译正则表达式部分只用了不到5分钟。

网上介绍的如何编译最多的一篇文章是“VC利用boost库解析正则表达式”,如果有人能根据这篇文章编译成功不妨告诉小弟一声……

以下是我的操作:


在“运行”里输入“cmd”,打开命令提示符;

输入命令“cd D:oostlibsegexuild”//设置当前目录

输入命令“D:”//转到当前目录

接下来是很关键的一步:
很多文章是这样说的“输入 nmake -fvc6.mak”
但是出现了“'nmake' 不是内部或外部命令,也不是可运行的程序或批处理文件。”的错误提示。
然后你就会拼命查找原因,结果又有文章上说是环境变量没配置好,然后给出一堆“set”。
也有的文章说是运行一下visual studio安装目录下的VC98BinVCVARS32.BAT文件就OK了。
你按照文章作者的方法做的,结果发现问题依旧!
以上说法都是正确的,但是说得都不是很完整,出现错误提示的根本原因就是环境变量没配置好,不识别nmake命令,配置过jdk的朋友就很容易明白。如果按照作者的要求搞一堆“set”,未免大题小作了吧,因为我们只需要用一次'nmake' 就可以解决问题了。
VCVARS32.BAT正式配置环境变量的批处理文件,但是配置的参数只在当前窗口有效,也就是说当你双击运行后窗口关闭,环境变量已经没有了。

于是我用了以下方法:
把VCVARS32.BAT文件用鼠标拖到打开的cmd窗口("D:Program FilesMicrosoft Visual StudioVC98BinVCV
ARS32.BAT"),然后回车。

输入命令“nmake -fvc6.mak”

等待几分钟,OK了!,D:oostlibsegexuild多了一个vc6的文件夹,里面是很多lib和dll文件。

3、到此资源已经准备好了,下面要做的工作是配置VC6.0,使它编译使时候能找到正则库。

把vc6下的所有lib和dll文件拷贝到Visual Studio安装目录下的VC98oostRex(boostRex是我自己建的)

然后打开vc6.0,选择“Tools-Options-Directories-Include files”,加入一行“D:BOOST”

选择“Tools-Options-Directories-Library file”,加入一行“C:PROGRAM FILESMICROSOFT VISUAL STUDIOVC98BOOSTREX”(彩色部分是我的Visual Studio安装目录)

配置也OK了!

4、编写程序测试

SDK下的测试:


#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;iwhat.size();i++)
    cout"str :"what.str()endl;
}
else
{
   cout"Error Input"endl;
}
return 0;
}

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

MFC下的测试(有几个地方要注意,下面有提示):

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)


新建一个对话框的MFC工程,
加入头文件
#include boost/regex.hpp

在按钮鼠标单击事件响应函数中加入
boost::regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");
CString in = "select gm from tab";
CString sRet;
boost::cmatch what;
if(boost::regex_match(LPCSTR(in), what, expression))//CString转string
{
   for(int i=0;iwhat.size();i++){
    sRet = (what.str()).c_str();//string转CString
    MessageBox(sRet);
   }
}
else
{
   MessageBox("Error Input");
}

输出的结果跟上面一样。

展开更多 50%)
分享

猜你喜欢

VC6.0下配置boost库使用正则表达式

编程语言 网络编程
VC6.0下配置boost库使用正则表达式

正则表达式

Web开发
正则表达式

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

正则表达式口诀 正则表达式学习工具

Web开发
正则表达式口诀 正则表达式学习工具

教你使用正则表达式

C语言教程 C语言函数
教你使用正则表达式

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

正则表达式使用详解

PHP
正则表达式使用详解

正则表达式的使用话题

Web开发
正则表达式的使用话题

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

高手支招卸载双系统的几种方法

高手支招卸载双系统的几种方法

在.Net 里用XPath的case-insensitive 的查询

在.Net 里用XPath的case-insensitive 的查询
下拉加载更多内容 ↓