接前面一篇日志,當用 CInternetSession 抓到網(wǎng)頁(yè)內容之后,就要從中按某種模式截取自己想要的東西,比如其中的電話(huà)區號,對于這種事情最擅長(cháng)的莫過(guò)于正則表達式了,以及它的分組/后向引用功能。
VC.net 倒是提供了一個(gè)很好的正則表達式類(lèi)庫 CATLRegExp (據說(shuō)是全世界效率最高的正則表達式庫),可是卻不能在VC6上使用,VC6可以使用VBS(Microsoft VBScript Regular Expression 5.5)這個(gè) COM 來(lái)處理正則表達式,或者引入 vbscript.dll 的方式,最好的辦法還是借助于第三方庫來(lái)處理正則表達式,如 boost,更何況若是使用 COM 就不太值(COM給人的感覺(jué)總有些笨拙)。
微軟件研究院也榮譽(yù)出品了一個(gè)既能在VC7也能在VC6下用的正則表達式庫,叫做 GRETA,詳情請點(diǎn)擊鏈接 The GRETA Regular Expression Template Archive for C++。
下面就介紹 boost 正則表達式的使用,從 boost 庫的下載安裝開(kāi)始
boost下載地址是:http://www.boost.org,當前版本是1.34.0,下載時(shí)會(huì )把你導向到 sourceforge.net 上,它也是 sourceforge 上的一個(gè)開(kāi)源項目
boost 庫安裝其實(shí)并不麻煩,只是需要自己編譯源文件,如果只需要用到它的正則表達式庫,按下面步驟做就行了
首先執行 cmd 進(jìn)入到命令行下
執行 cd C:boost_1_34_0libsregexbuild 進(jìn)入目錄(假設你下載的 boost 是解壓這 C:boost_1_34_0目錄下)
執行 vcvars32.bat (設置編譯時(shí)的環(huán)境變量,如頭/庫文件目錄等)
執行 nmake -fvc6.mak (耐心等待一下,編譯生成 lib、pdb 和 dll 文件在目錄C:boost_1_34_0libsregexbuildvc6中)
執行 nmake -fvc6.mak install (其實(shí)就是把前一步生成的 lib/pdb 文件拷到 ~VC98/lib 目錄下;把 dll 文件拷到 ~VC98/bin 目錄下,當然,你想手工拷貝來(lái)完成這一步也行)
注意,別看下載下來(lái)的數據包沒(méi)有多大,因為是源文件,壓縮比可高啦,尤其是編譯完更大,占用100多M,所以安裝時(shí)一定注意空出足夠的空間。記得發(fā)布程序的時(shí)候要把剛那些 dll 文件帶上。
使用前準備,在VC6中集成:Tools->Options->Directories->Include files 中加入目錄: C:boost_1_34_0
最后是在 VC6 中寫(xiě)段代碼來(lái)測試一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #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 ;} |
執行后的輸出結果如下:
1 2 3 4 | str :2007-06-23str :2007str :06str :23 |
表達式所匹配的字符串,以及年月日非常簡(jiǎn)單的成功分離。
聯(lián)系客服