zoukankan      html  css  js  c++  java
  • 转:VC调用vbscript.dll使用其正则表达式库

    最近要实现一个车险特别约定内的值填空,但是又不想录单员随便在特别约定内乱录入,毕竟这是要打印到保单上面的,
    所以考虑在在特别约定模板内增加部分文本弹出录入后替换,所以用到了正则表达式.
    VC6使用正则表达式的话,有很多选择,最主要我觉得有两种:一种是使用boost的正则表达式库,还要一种是现在介绍的以com的方式调用的vbscript.dll了。
    其中,我个人倾向于使用vbscript.dll的正则表达式库,原因:主要是,感觉这么小的功能,没必要动用boost这样的牛刀,杀这样一只蚂蚁也不太合适,所以
    还是使用vbscript.dll,而且这个使用这个也有很多优点的,在win平台下,该dll是系统自带的,在system32里面。而且,考虑到一个问题,boost库的正则
    表达式似乎与.net里面的有些许区别,而且javascript里面用的正则表达式库也是这个,总而言之,比较熟!

    废话有点多,总而言之,用这个好!

    进入正题了,首先用vc以资源的方式打开C:\Windows\System32\vbscript.dll,注意以资源的方式打开,默认是auto,那就只是看到一个vbscript.dll了。

    选择typelib的第二项,选择导出成RegExp.tlb

    然后将RegExp.tlb拷到工程目录下,在stdafx.h里面加一句

    #import "RegExp.tlb"

    因为要调用com所以在InitInstance里面

    if(!AfxOleInit())
        AfxMessageBox("Initial Failure");

    然后写个函数试一下

    UpdateData();

    VBScript_RegExp_10::IRegExpPtr pRegExp;
    HRESULT    hr;
    hr = pRegExp.CreateInstance(__uuidof(VBScript_RegExp_10::RegExp));
    if(FAILED(hr)){
        MessageBox("无法创建正则表达式对象!");
    return;
    }
    pRegExp->PutPattern((_bstr_t)(const char *)m_strPattern);/*正则表达式*/
    /*If the RegExp.Global property is False (the default), MatchCollection will    contain only the first match. 
      If RegExp.Global is true, Matches> will contain all matches.*/

    pRegExp->PutGlobal(VARIANT_TRUE);

    VBScript_RegExp_10::IMatchCollectionPtr pMC =
           pRegExp->Execute((_bstr_t)(const char *)m_strContent);/*要匹配的内容*/
    VBScript_RegExp_10::IMatchPtr pM;
    CString sTxt;
    for(int i=0;i<pMC->Count;i++){        
           pM = pMC->GetItem(i);
           sTxt = (char *)pM->GetValue();
           MessageBox(sTxt,"匹配项");
    }
    pRegExp.Release();

    发张靓图:

    Tag标签: 正则表达式,vc,vbscript.dl,IRegRex

    冷侃
    关注 - 0
    粉丝 - 0

    关注博主

    --------------------- 我可以操纵冰冷的代码,但我操纵不了我的人生...... [url=http://www.puya360.com]西安普雅软件工作室[/url]
  • 相关阅读:
    phpcms后台进入地址(包含No permission resources错误)
    phpmyadmin上传大sql文件办法
    ubuntu彻底卸载mysql
    Hdoj 2602.Bone Collector 题解
    一篇看懂词向量
    Hdoj 1905.Pseudoprime numbers 题解
    The Python Challenge 谜题全解(持续更新)
    Hdoj 2289.Cup 题解
    Hdoj 2899.Strange fuction 题解
    Hdoj 2199.Can you solve this equation? 题解
  • 原文地址:https://www.cnblogs.com/ternastone/p/1832738.html
Copyright © 2011-2022 走看看