首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC6.0 專案整合 Boost.Regex 正則表達式庫:從下載、編譯到專案配置完整教學

     編輯:VC 教學

為什麼選 Boost.Regex?

  • 標準 C++ 風格,功能強大 (支援 Perl 兼容語法)
  • Header-only 核心,但 Regex 需編譯獨立庫
  • 跨平台、社群活躍、VC6.0 相容性佳

步驟 1:下載與解壓

  • 官網:boost.org → 下載完整包 (如 boost_1_33_1.zip)
  • 解壓至 D:\boost (路徑無空格、中文)

步驟 2:編譯 Regex 庫 (僅編譯所需模組)

> cmd
> cd D:\boost\libs\regex\build
> "D:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"  // 設定 VC6 環境變數
> nmake -fvc6.mak
// 產生 vc6\ 目錄,含 .lib / .dll

關鍵點:VCVARS32.BAT 必須在同一命令視窗執行

雙擊執行無效 (環境變數隨視窗關閉消失)。正確做法:cmd → 拖曳 VCVARS32.BAT 到視窗 → Enter → 再執行 nmake。

步驟 3:專案屬性配置

  1. 將 D:\boost\libs\regex\build\vc6\*.lib 複製至專案目錄或統一庫目錄 (如 C:\Program Files\Microsoft Visual Studio\VC98\BoostLib)
  2. VC6.0 選單:Tools → Options → Directories
    • Include files:新增 D:\boost
    • Library files:新增 C:\Program Files\Microsoft Visual Studio\VC98\BoostLib

步驟 4:程式碼測試

主控台應用程式

#include 
#include 
#include 

using namespace std;
using namespace boost;

int main() {
    regex expr("^select ([a-zA-Z]*) from ([a-zA-Z]*)");
    string input;
    cmatch what;
    
    cout << "Enter SQL: ";
    getline(cin, input);
    
    if (regex_match(input.c_str(), what, expr)) {
        for (int i = 0; i < what.size(); ++i)
            cout << "Group " << i << ": " << what[i] << endl;
    } else {
        cout << "Not match" << endl;
    }
    return 0;
}

MFC 應用程式 (注意 CString 轉換)

void CMyDlg::OnBtnTestRegex() {
    boost::regex expr("^select ([a-zA-Z]*) from ([a-zA-Z]*)");
    CString strInput = _T("select name from users");
    boost::cmatch what;
    
    // CString → const char* (ANSI 建置)
    if (boost::regex_match(static_cast(strInput), what, expr)) {
        for (int i = 0; i < what.size(); ++i) {
            CString strMatch(what[i].str().c_str()); // std::string → CString
            AfxMessageBox(strMatch);
        }
    } else {
        AfxMessageBox(_T("Not match"));
    }
}

Unicode 專案特別處理

  • Unicode 建置下 CString 為 wchar_t*,需用 boost::wregex、boost::wcmatch
  • 或統一專案設為「多位元組字元集 (MBCS)」簡化轉換
  • 轉換輔助:CStringA strA(strInput); (MFC 7.0+)、CT2CA (ATL 轉換巨集)

常見編譯錯誤與解決

錯誤原因解決
找不到 boost/regex.hppInclude 目錄未加入 boost 根目錄Tools→Options→Directories→Include files 加入 D:\boost
LNK2001: 未解析的外部符號 _regex_match未連結 regex 庫Library files 加入庫目錄,專案設定→Link→Object/Library modules 加入 boost_regex.lib
fatal error C1083: 無法開啟編譯的類型庫預編譯標頭衝突stdafx.h 先包含 boost/regex.hpp,或關閉預編譯標頭
nmake 非內部命令未執行 VCVARS32.BAT同一 cmd 視窗先執行 VCVARS32.BAT

Boost 版本選擇建議

  • VC6.0 建議使用 Boost 1.33.1 ~ 1.38.0,較新版本可能不支援 VC6
  • 僅需 Regex 時,只編譯 libs/regex/build,節省大量時間 (完整編譯需 1-2 小時)
  • 靜態連結 (boost_regex.lib) 部署簡單;動態連結 (boost_regex.dll) 需隨程式部署 DLL

完成上述步驟,您的 VC6.0 專案即擁有現代化、標準化的正則表達式能力,輕鬆應對複雜字串解析、驗證、提取需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved