程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 在VC6中使用正則表達式解析字符串

在VC6中使用正則表達式解析字符串

編輯:關於VC++

接前面一篇日志,當用 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

表達式所匹配的字符串,以及年月日非常簡單的成功分離。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved