在VC6中使用正则表达式解析字符串
来源:优易学  2011-12-31 15:06:44   【优易学:中国教育考试门户网】   资料下载   IT书店
  当用 CInternetSession 抓到网页内容之后,就要从中按某种模式截取自己想要的东西,比如其中的电话区号,对于这种事情最擅长的莫过于正则表达式了,以及它的分组/后向引用功能。
  VC.net 倒是提供了一个很好的正则表达式类库 CATLRegExp (据说是全世界效率最高的正则表达式库),可是却不能在VC6上使用,VC6可以使用VBS(Microsoft VBScript Regular Expression 5.5)这个 COM 来处理正则表达式,或者引入 vbscript.dll 的方式,最好的办法还是借助于第三方库来处理正则表达式,如 boost,更何况若是使用 COM 就不太值(COM给人的感觉总有些笨拙)。
  微软件研究院也荣誉出品了一个既能在VC7也能在VC6下用的正则表达式库,叫做 GRETA,详情请点击链接 The GRETA Regular Expression Template Archive for C++。
  下面就介绍 boost 正则表达式的使用,从 boost 库的下载安装开始
  boost下载地址是:http://www.boost.org,当前版本是1.34.0,下载时会把你导向到 sourceforge.net 上,青年人网提示它也是 sourceforge 上的一个开源项目
  boost 库安装其实并不麻烦,只是需要自己编译源文件,如果只需要用到它的正则表达式库,按下面步骤做就行了
  首先执行 cmd 进入到命令行下
  执行 cd C:boost_1_34_0libsregexbuild 进入目录(假设你下载的 boost 是解压这 C:boost_1_34_0目录下)
  执行 vcvars32.bat (设置编译时的环境变量,如头/库文件目录等)
  执行 nmake -fvc6.mak (耐心等待一下,编译生成 lib、pdb 和 dll 文件在目录C:boost_1_34_0libsregexbuildvc6中)
  执行 nmake -fvc6.mak install (其实就是把前一步生成的 lib/pdb 文件拷到 ~VC98/lib 目录下;把 dll 文件拷到 ~VC98/bin 目录下,当然,你想手工拷贝来完成这一步也行)
  注意,别看下载下来的数据包没有多大,因为是源文件,压缩比可高啦,尤其是编译完更大,占用100多M,所以安装时一定注意空出足够的空间。记得发布程序的时候要把刚那些 dll 文件带上。
  使用前准备,在VC6中集成:Tools->Options->Directories->Include files 中加入目录: C:boost_1_34_0
  最后是在 VC6 中写段代码来测试一下:
  #include < cstdlib >
  #include < stdlib.h >
  #include < boost / regex.hpp >
  #include < string >
  #include < iostream >
  using  namespace std;
  using  namespace boost;
  int main( int argc, char * argv[])
  {
  regex expression( " (d+)-(d+)-(d+) " ); // 注意转义方式
  string  in ( " Today: 2007-06-23 " );
  cmatch what;
  // 如果用 regex_match 方法将需要完全匹配,
  // 不能在字符串中找寻模式,可用于验证输入
  if (regex_search( in .c_str(), what, expression))
  {
  for ( int i = 0 ;i < what.size();i ++ )
  {
  cout << " str : " << what[i].str() << endl;
  }
  }
  return  0 ;
  }
  执行后的输出结果如下:
  str :2007-06-23
  str :2007
  str :06
  str :23
  表达式所匹配的字符串,以及年月日非常简单的成功分离。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训