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));
ExpandedBlockStart.gifContractedBlock.gif
if (FAILED(hr)) {
    MessageBox(
"无法创建正则表达式对象!");
    
return;
}

pRegExp
-> PutPattern((_bstr_t)( const   char   * )m_strPattern); /*正则表达式 */

ExpandedBlockStart.gifContractedBlock.gif /**/ /*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;
ExpandedBlockStart.gifContractedBlock.gif
for ( int  i = 0 ;i < pMC -> Count;i ++ ) {        
       pM 
= pMC->GetItem(i);
       sTxt 
= (char *)pM->GetValue();
       MessageBox(sTxt,
"匹配项");
}

pRegExp.Release();

 发张靓图:

 

 

 

转载于:https://www.cnblogs.com/linbc/archive/2009/03/12/1409476.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值