开发者社区> 杨粼波> 正文

VC中的正则表达式使用

简介: 对于很多应用,例如文件查询和名称匹配,在html文件中查找匹配的超链接等等 正则表达式自然是最好的解决方法. 不过VC里面竟然不如VBS对于Regular Expression那样有支持, 除非升级到VC.NET(使用拖管C++就可以使用).
+关注继续查看
对于很多应用,例如文件查询和名称匹配,在html文件中查找匹配的超链接等等 正则表达式自然是最好的解决方法. 不过VC里面竟然不如VBS对于Regular Expression那样有支持, 除非升级到VC.NET(使用拖管C++就可以使用).
    其实VBS也是使用了微软自己REGEX的一个COM, 称为 "Microsoft VBScript Regular Expression 5.5" 在OleViewer可以查找到相关信息. 下面是那篇文章的使用例子
None.gif#import "RegExp.tlb" no_namespace
None.gif  dot.gif
ExpandedBlockStart.gif  try {
InBlock.gif    static IRegExpPtr regExp( __uuidof(RegExp) );
InBlock.gif    regExp->Pattern = _bstr_t(lpszPattern);
InBlock.gif  
InBlock.gif    HWND hWndCtrl = pDX->PrepareEditCtrl(nIDC);
InBlock.gif    if (pDX->m_bSaveAndValidate)
ExpandedSubBlockStart.gif    {
InBlock.gif        int nLen = ::GetWindowTextLength(hWndCtrl);
InBlock.gif        ::GetWindowText(hWndCtrl, value.GetBufferSetLength(nLen),nLen+1);
InBlock.gif        value.ReleaseBuffer();
InBlock.gif  
InBlock.gif        //now we verify it
InBlock.gif
        if ( regExp->Test( (LPCTSTR)value) )
ExpandedSubBlockStart.gif        {
InBlock.gif            IMatchCollectionPtr matches=regExp->Execute((LPCTSTR)value);
InBlock.gif            if ( matches->Count== 1)
ExpandedSubBlockStart.gif            {
InBlock.gif                IMatchPtr match = matches->Item[0];
InBlock.gif                if ( match->FirstIndex==0 && match->Length == value.GetLength() )
ExpandedSubBlockStart.gif                {
InBlock.gif                  return;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif        CString strMsg = CString("The input does not exactly have the pattern ") + lpszPattern;
InBlock.gif        pDX->m_pDlgWnd->MessageBox(strMsg);
InBlock.gif        pDX->PrepareEditCtrl(nIDC);
InBlock.gif        pDX->Fail();
ExpandedSubBlockEnd.gif    }

InBlock.gif    else
ExpandedSubBlockStart.gif    {
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif  }

None.gif  catch (_com_error& e)
ExpandedBlockStart.gif  {
InBlock.gif      AfxMessageBox( e.ErrorMessage() );
ExpandedBlockEnd.gif  }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQLSERVER中正则表达式封装使用
原文:SQLSERVER中正则表达式封装使用 封装好的正则表达式供SQLSERVER调用 打开数据库->可编程性->函数->标量值函数->新建标量值函数名 USE [数据库]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER function [dbo].
747 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
13773 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18061 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24832 0
《Puppet实战手册》——2.9 在if语句中使用正则表达式
正则表达式非常强大,但是很难理解和调试。如果感觉正在用的正则表达式太复杂,不能一眼看明白它在做什么,最好简化设计,使其更加简单化。但是,正则表达式捕获模式是个非常有用的功能。
2095 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19808 0
VC中的正则表达式使用
对于很多应用,例如文件查询和名称匹配,在html文件中查找匹配的超链接等等 正则表达式自然是最好的解决方法. 不过VC里面竟然不如VBS对于Regular Expression那样有支持, 除非升级到VC.NET(使用拖管C++就可以使用).
977 0
xcode中使用正则表达式来搜索替换代码
有这样的需求: 类似于 GLOBAL_STR(@"请继续添加"); 这样的代码,需要批量修改为: GLOBAL_STR(@"请继续添加", nil); 这里使用普通的查找替换不能够达到目的,需要用到正则表达式: GLOBAL_STR(.*); 替换文本的正则: GLOBAL_STR(.$1,nil); xcode的查找替换选项里面选择regular expression,使用上面的正则即可解决问题。
1092 0
+关注
杨粼波
网游的老兵
1152
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载