关于greta正则表达式的使用收藏

探索C++中的greta正则表达式模板类库 在信息处理的领域中,正则表达式是一种强大的文本处理工具,它使用特定的规则来描述字符序列,用于匹配、查找、替换和提取字符串。正则表达式通常简称为 regex,广泛应用于文本编辑器、开发工具和编程语言中。CAtlRegExp库是ATL(Active Template Library)的一部分,提供了一套丰富的正则表达式处理功能。该库使得在C++中处理字符串匹配、搜索和替换等操作变得简单高效。 阅读详情
   关于greta正则表达式的使用收藏

新一篇: WebBrowser2封装的容器 | 

VC可以使用的正则表达式我知道的有:ATL CAtlRegExp,GRETA,Boost::regex 等正则表达式库,这些表达式库使我们可以方便地利用正则库的巨大威力,给我们的工作提供了便利。
这种些正则表达式各自有自己的优点,但我最终还是选择了使用GRETA正则表达式,因为ATL CAtlRegExp速度相比较有些慢,而Boost库我目前还不会使用.GRETA相比较Boost是轻量级的,而且也是转门用来处理正则表达式的.速度也是最快的.

但是目前在网上有关GRETA库使用的文档真是少之有少,由于此库是完全天源的,所以下载下来以后只有6个源文件,使用这些源文件可以两种方法, 1:只接添加它们到你的工程.2:编译成为静态库.第1种方式不是太好,会使你的工程里有过多的类而显得不清晰.在网上可以找到一些已经编译好的Lib 库,最好不要使用,因为Lib库和你工程的run-time library不一样,会导致链接错误.所以最好自己生成和工程同样的run-time library.

使用时只需要包含regexpr2.h即可,有关正则表达式的语法可以参见其它方档.

我们只需要关注GRETA的的几个对象即可,它们是:

  1. rpattern : 搜索的模式
  2. match_results : 放置匹配的容器
  3. subst_results : 放置替换的容器
  4. split_results : 放置分离的窗口(此接口的使用方法不是很清楚)

使用方法参见下面的实例:

void  CPrepareHtml::FindLable(CString strContant)
{
    rpattern pattern(
"/[LABEL +id *= *"([0-9A-Za-z_-]+)" */]",GLOBAL|NOCASE|ALLBACKREFS);
    match_results results;
    match_results::backref_type br 
= pattern.match((LPCTSTR)strContant,results);
//    match_results::backref_vector backVec = results.all_backrefs();

    IXMLDOMDocument2Ptr pDoc;
    IXMLDOMElementPtr pElem;
    HRESULT hr 
= pDoc.CreateInstance(__uuidof(DOMDocument));
    
if (SUCCEEDED(hr))
    
{
        pElem 
= pDoc->createElement("LABELS");
        pElem 
= pDoc->appendChild(pElem);

        
for (int iter = 1;iter < results.cbackrefs();iter += 2) // 目前还没有找到读取子表达式更好的方法
        {
            match_results::backref_type br_Temp 
= results.backref(iter);
            std::
string strValue = br_Temp.str();

            IXMLDOMElementPtr pElemLable 
= pDoc->createElement("LABEL");
            pElemLable 
= pElem->appendChild(pElemLable);
            pElemLable
->Puttext(strValue.c_str()); // 匹配到的字符串生成XML结点
        }

        
/*
        for (int iter = 1;iter < backVec.size();iter += 2)
        {
            match_results::backref_type br_Temp = backVec[iter];
            std::string strValue = br_Temp.str();

            IXMLDOMElementPtr pElemLable = pDoc->createElement("LABEL");
            pElemLable = pElem->appendChild(pElemLable);
            pElemLable->Puttext(strValue.c_str());
        }
        
*/

    }


    
static const rpattern patsubst("/[APP +id *= *"HTMLROOT *" */]","C://whiz",GLOBAL|NOCASE); // 第二个参数是表达式语法
    subst_results subResults;
    std::
string sContant(strContant);
    
int nSub = patsubst.substitute(sContant,subResults);
    sContant 
= ReplaceLable(pDoc,sContant);
    WriteHTMLFile(
"C:/temp/tempHTML.html",sContant.c_str(),sContant.length());
}


std::
string  CPrepareHtml::ReplaceLable(IXMLDOMDocument2Ptr &  pDoc,std:: string  strContant)
{
    CString strPattern;
    IXMLDOMNodePtr pLable 
= NULL;
    IXMLDOMNodeListPtr pLableList 
= pDoc->selectNodes("/LABELS/LABEL"); // 读取XML结点
    while (pLable = pLableList->nextNode())
    
{
        CString strLable 
= (BSTR)pLable->Gettext();
        CString strValue 
= m_IniDic[strLable];
        strPattern.Format(
"/[LABEL *id="%s" */]",strLable);
        strContant 
= ReplaceTag(strPattern,strValue,strContant);
    }

    
return strContant;
}


std::
string  CPrepareHtml::ReplaceTag(LPCTSTR pattern,LPCTSTR value,std:: string &  Contant)
{
    rpattern patsubst(pattern,value,GLOBAL
|NOCASE);
    subst_results subResults;
    
int nSub = patsubst.substitute(Contant,subResults); // 替换
    return Contant;
}

以上的这些是经过我一上午的研究,关于split_results 还不会使用,希望有人指点.

发表于 @ 2008年02月18日 09:41:00|评论(3)|编辑

新一篇: WebBrowser2封装的容器 | 

评论

# fietiger 发表于2008-07-19 19:25:19  IP: 59.62.128.*
你好,我在使用Greta的时候参考了你的代码,其中的替换竟然会出问题。我的代码是这样的:
static const rpattern s_crlf( "(?<!/r)/n", "/r/n", GLOBAL );
string str ((LPCTSTR)"Wer.exe");

s_crlf.substitute( str, results );
就这样一加最后一句就出现:
error C2587: '_U' :
等错误,我怀疑是不是编译的设置问题,麻烦请教一下。谢谢!
# fietiger 发表于2008-07-19 19:29:23  IP: 59.62.128.*
另外,我使用分隔与查找都可以的。只是这个替换不可以用。
split_results sr;
const char * m_Pattern = "[/////]+";
rpattern pat((LPCTSTR)m_Pattern);
split_results::iterator iter;
pat.split((LPCTSTR)strPath, sr);

CString sSplitResult;
iter = sr.begin();
sSplitResult += CString(iter->begin(), iter->size());
sSplitResult += "/";
if(_taccess(sSplitResult, 0)!=0)
{
// MessageBox("盘符错误!");
/*CreateDirectory(m_strPath, NULL);*/
return false;
}
# sunmz_wjxy 发表于2008-07-21 11:20:13  IP: 219.140.59.*
如果greta是动态库或者静态库,则要和程序同样的编译选项编译才行


run-time library一定要一样才可以
GRETA 2.6.4正则表达式库C++实战详解 GRETA库是专为处理正则表达式而设计的C++库,其发展历程始于20世纪末期,随着文本处理的需求增长而逐渐成熟。该库支持复杂的正则表达式解析,并能够执行各种模式匹配任务。2.6.4版本是在多年迭代优化后推出的,它不仅增强了原有功能,还引入了新的特性来适应现代编程的需求。在C++中使用正则表达式之前,首先需要包含<regex>头文件,并使用std::regex命名空间。这是因为从C++11开始,标准库中的正则表达式库被引入,提供了正则表达式的编译、匹配等功能。 阅读详情

相关推荐

Greta正则表达式

Greta正则表达式源码,带例子,支持VC6

GRETA正则表达式模板类库

正则表达式语法 字符元 意义 . 匹配单个字符 [ ] 指定一个字符类,匹配方括号内的任意字符。例:[abc] 匹配 "a",

LEE的专栏 930

Greta正则表达式类库中文手册

自己有一阵子晚上无聊时翻译的,可能有不准确的地方,欢迎交流指正!

关于greta正则表达式的使用

VC可以使用的正则表达式我知道的有:ATL CAtlRegExp,GRETA,Boost::regex 等正则表达式库,这些表达式库使我们可以方便地利用正则库的巨大威力,给我们的工作提供了便利。这种些正则表达式各自有自己的优点,但我最终还是选择了使用GRETA正则表达式,因为ATL CAtlRegExp速度相比较有些慢,而Boost库我目前还不会使用.GRETA相比较Boost是轻量级的,而且也是

sunmz_wjxy的专栏 4119

Greta库和使用例子

Greta库和一个正则表达式测试工具(WTL工程)。 vc2008工程,2005的删掉工程配置文件重建。 Greta是lib,测试工具是windows窗体程序

CentOS7下通过YUM源高效部署Zabbix7 Agent指南

本文详细指导在已结束生命周期的CentOS7系统上,通过更换YUM源(如阿里云镜像)并添加Zabbix官方仓库,高效部署Zabbix7 Agent。文章涵盖从源配置、软件安装、关键参数修改到服务启动与防火墙设置的全流程,帮助用户解决依赖错误,快速建立服务器监控。

weixin_29230059的博客 268

如何把GRETA加入到自己的项目中

  如何把GRETA加入到自己的项目中收藏 新一篇: Winsock 2 SPI 的技术特点 |  function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection(

skyremember的专栏 1320

3. ChaosBlade-Box平台安装

参考自:https://chaosblade.io/docs/about-chaosblade/box-introduce/通过ChaosBlade-Box可实现chaosblade等已托管工具自动化部署,按照社区的建立的混沌实验模型统一实验场景,根据主机、Kubernetes、应用来划分目标资源,通过目标管理器来控制,在实验创建页面,可以实现白屏化的目标资源选择。

lldhsds的专栏 2485

ATL正则表达式库使用收藏

 ATL正则表达式库使用收藏 新一篇: 浅谈粮情测控系统的硬件集成及软件开发 | 旧一篇: 关于文档安全工具 function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelec

skyremember的专栏 840

Agentic RAG:RAG从静态到具有理解、推理、决策的Agentic RAG

RAG技术演进:从静态检索到智能代理 RAG(检索增强生成)技术经历了五个关键发展阶段:基础RAG(关键词检索)、高级RAG(语义理解)、模块化RAG(灵活架构)、图RAG(知识图谱)和最新的Agentic RAG(智能代理)。Agentic RAG通过引入自主AI代理,具备反思、规划、工具使用和多代理协作能力,实现了动态决策和自适应工作流。相比传统RAG的静态检索流程,Agentic RAG能处理复杂多步推理任务,通过自我改进机制提高输出质量,并支持多专业代理协作,显著提升了RAG系统在复杂场景下的表现。

2537

逆向实战:从x-mini签名到RPC调用,Frida动态分析小红书加密协议

本文通过实战案例,详细拆解了小红书App的加密协议逆向分析过程。从识别x-mini签名等关键参数入手,结合静态分析与Frida动态Hook技术,追踪到核心的RPC调用入口,并最终封装成可独立调用的RPC函数,为安全研究和协议理解提供了完整的技术路径。

moss5的博客 1032

GRETA 正则表达式

在抓取字符串值时,想到到了GRETA 的正则 于是写了个小例了,希望对大家有所帮助 int _tmain(int argc, _TCHAR* argv[]) { CAtlRegExp reUrl; REParseError status ; reUrl.Parse((_T("({.asp})")),128); if (REPARSE_ERROR_OK) {...

jiachenmianyu的专栏 310

C2000ware介绍

C2000的下载安装指南C2000目录。

小柚子的博客 2796

GRETA 正则表达式库

导读:   ..:: Greta ::..      [原创文章,转载请保留或注明出处:http://www.nk975.com/sswater/zh/greta/index.htm]        GRETA 为 C++ 提供了兼容 Perl 5 的正则表示支持。GRETA的主页位于:http://research.microsoft.com/projects/greta/。今天,我们并

xu的blog 1541

Unity 如何使用命令模式

命令模式 游戏中,当你想通过一种通用的方式来存储命令并能够撤消命令时,那么命令模式最有用。 在“示例”中,你将看到一个可以通过GUI按钮移动的简单点。 采取行动后,您可以撤消并重做。我在屏幕上添加了一个简单的OnGUI标签输出,因此您可以看到命令列表,并指出哪个是当前命令。 在此示例中使用了4个类: Command-这是任何命令模式都可以继承的基本结构(抽象类)。您可以在任何项目中使用此类。 MoveCommand-这是从Command类继承的结构,将使用Execute和UnExecute(撤消)。每个移

TxNet 1556

一步步带你用C#开发Modbus通信上位机(附完整代码与工程思路)

Modbus上位机开发指南(C#实现) 本文详细介绍使用C#开发Modbus上位机系统的全过程,覆盖RTU和TCP两种协议。内容包含:1)需求分析与技术选型(WinForms+NModbus4);2)分层架构设计(UI/业务/通信层);3)通信层核心代码实现(串口/以太网连接、数据读写);4)功能模块开发(设备管理、数据采集、远程控制)。提供可直接复用的Modbus RTU客户端代码示例,包含连接管理、线圈读写、寄存器操作等工业场景必备功能。通过系统化的开发流程,帮助开发者快速构建稳定可靠的Modbus监控

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 821

Greta 正则表达式

想用正则表达式解析html,获取内容,第一次使用,不知道怎么用,十分纠结。 http://fenying.blog.163.com/blog/static/102055993200952061238514/ http://hi.baidu.com/olggun/blog/item/5bee5022e1755d549822edb1.html 转载于:https:/...

weixin_33826268的博客 162

深度拆解 ‘High-Frequency Trading’ (HFT) 系统:解析如何在 100 纳秒内完成从网卡到 C++ 策略的响应

在100纳秒内完成从网卡到C++策略的响应,这是一项对技术栈每一个层面都进行极限优化的系统工程。它要求我们深入理解计算机体系结构、操作系统、网络协议和C++语言的底层机制。从物理距离的极致缩短,到高性能网卡和内核旁路技术,再到C++代码中每一个字节、每一个CPU周期的精打细算,HFT系统展现了人类对计算速度的永恒追求。这项技术不仅仅应用于金融交易,其背后的低延迟理念和实现方法,如DPDK、无锁编程、硬件加速等,正在逐渐渗透到其他对延迟敏感的领域,例如电信网络、边缘计算和工业自动化。

weixin_41455464的博客 1039

c++正则表达式模板库GRETA的使用

GRETA是微软研究院的一位前员工开发并开源的一个C++正则表达式库,兼容perl正则语法 官方介绍:“A fast, flexible, perl-compliant regular expression template library for C++.” 获取地址:http://research.microsoft.com/en-us/downloads/bd99f343-4ff4-40...

weixin_30834019的博客 248

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

介绍 ATL CAtlRegExp,GRETA,Boost::regex 等正则表达式库

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34240657的博客 180

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Makefile之patsubst

经常要手写项目的Makefile,或者看其他项目的遗留项目的Makefile,有些makefile内置函数常用, 却用完就忘记了,最近项目中使用patsubst,感觉挺好用的 格式:$(patsubst <pattern>,<replacement>,<text> ) 名称:模式字符串替换函数——patsubst。功能...

weixin_30896511的博客 858

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

编译错误error C2587: '_U' : illegal use of local variable as default parameter的问题

在使用GRETA库编译的时候(VC6.0),由于某种原因会产生error C2587: _U 错误,解决方法:打开VC98/Include/XLOCNUM,找到#define _VIRTUAL virtual,改为#define _VIRTUAL,重新编译可解决这个错误。这个方法也是在网上看到的,可能会存在一定问题。

nbabn的专栏 1176
上一篇: C++和JavaScript脚本的相互调用收藏
下一篇: WebBrowser2封装的容器收藏
skyremember
博客等级 码龄20年 204粉丝 484原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值