VC++中使用正则表达式RegExp
使用vbscript中的正则表达式
复制一份 C:\Windows\System32\vbscript.dll ,使用VC++以资源的方式打开VBScript.dll,在其中选择TypeLib,将第2个TypeLib输出为 vbRegExp.tlb, 将它放入工程目录(xxx.vcxproj所在目录)
1.
2.
3.
4.
导出文件,命名为 vbRegExp.tlb
OK 3.42KB
使用:
在 stdafx.h 的最后添加 #import "vbRegExp.tlb" no_namespace

void testRegEx() { CoInitialize(NULL); { IRegExpPtr regExpPtr(__uuidof(RegExp)); regExpPtr->PutGlobal(VARIANT_TRUE); regExpPtr->PutPattern("\\d+[A-z]{1,2}"); _bstr_t testStr = "This 0 1dd2d345"; IMatchCollectionPtr matches = regExpPtr->Execute(testStr); long count = matches->GetCount(); for (long i = 0; i<count; i++) { IMatchPtr match = matches->GetItem(i); if (match) { CStringA str = (char*)match->GetValue(); } } } CoUninitialize(); } //或者 class Bootstrapper { BOOL m_bComInitialized; public: Bootstrapper(){ m_bComInitialized = FALSE; if (SUCCEEDED(::CoInitialize(NULL))) m_bComInitialized = TRUE; } ~Bootstrapper(){ if (m_bComInitialized) ::CoUninitialize(); } }; void testRegEx() { Bootstrapper bst; try{ IRegExpPtr regExpPtr(__uuidof(RegExp)); regExpPtr->PutGlobal(VARIANT_TRUE); regExpPtr->PutPattern("\\d+[A-z]{1,2}"); _bstr_t testStr = "This 0 1dd2d345"; IMatchCollectionPtr matches = regExpPtr->Execute(testStr); long count = matches->GetCount(); for (long i = 0; i<count; i++) { IMatchPtr match = matches->GetItem(i); if (match) { CStringA str = (char*)match->GetValue(); } } } catch (_com_error &e){ _bstr_t err = e.Description(); } }
常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义