zoukankan      html  css  js  c++  java
  • VC++中使用正则表达式RegExp

    使用vbscript中的正则表达式

    复制一份 C:WindowsSystem32vbscript.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();
        }
    }
    View Code

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    MySQL-基本sql命令
    Java for LeetCode 203 Remove Linked List Elements
    Java for LeetCode 202 Happy Number
    Java for LeetCode 201 Bitwise AND of Numbers Range
    Java for LeetCode 200 Number of Islands
    Java for LeetCode 199 Binary Tree Right Side View
    Java for LeetCode 198 House Robber
    Java for LeetCode 191 Number of 1 Bits
    Java for LeetCode 190 Reverse Bits
    Java for LeetCode 189 Rotate Array
  • 原文地址:https://www.cnblogs.com/htj10/p/13111777.html
Copyright © 2011-2022 走看看