[C/C++11]_[初级]_[使用正则表达式库进行分组查询]

news/2024/11/24 13:30:06/

场景

1.正则表达式在查询替换字符串数据时效率很高, 可以节省很多不必要的查询代码. 特别是对字符串分组的查询, 可以说如果没有正则表达式,查询分组里的字符串需要写很多额外的代码,还不一定准确.

2.查询并替换XML标签是比较常见的需求, 比如过滤掉HTML标签里的标签, 提取字符串内容等.

例子

1.这里举例了C++正则库的分组查询功能, 一个用于提取特定字符串, 一个用于替换字符串.


// test-regexp.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <regex>
#include <iostream>std::wstring PickLinkShowContent(const wchar_t* buf1){std::wstring buf(buf1);std::wregex pattern(L"(<A HREF=\"[^\"]*\">)([^<]*)(</A>)",std::regex_constants::ECMAScript|std::regex_constants::icase);auto words_begin =std::wsregex_iterator(buf.begin(), buf.end(), pattern);auto words_end = std::wsregex_iterator();std::wstring result;int start = 0;int end = 0;for (std::wsregex_iterator i = words_begin; i != words_end; ++i){std::wsmatch match = *i;size_t pos = match.position();size_t length = match.length();std::wstring prev = buf.substr(start,pos-start);result.append(prev);result.append(match[2]);end = pos+length;start = pos+length;}if(end+1 != buf.length()){result.append(buf.substr(end));}return result;
}std::string ReplaceStr(const char* text,const char* old,const char* _new){std::regex pattern(old);std::string rep(_new);std::string text1(text);std::string tmp = std::regex_replace(text1,pattern,rep);return tmp;
}int _tmain(int argc, _TCHAR* argv[])
{std::cout << "Test regex group 1" << std::endl;const wchar_t* buf = L"You haven't installed QQPCMgr on this computer. "L"Please <a HREF=\"http://www.qq.com\">download</A> and install the latest QQPCMgr first, "L"then reboot the program.";auto result = PickLinkShowContent(buf);std::wcout << result << std::endl;std::cout << "Test regex group 2" << std::endl;static const char* buf2 = """<key>name</key>""<string>百度</string><key>position</key>""<string>2</string>""</dict>""<key>05975BCB-FD95-48A4-A912-37ECACD39871</key>""<dict>""<key>name</key>""<string>必应</string>""<key>url</key>""<string>http://www.bing.com/</string>""<key>position</key>""<string>3</string>";auto result2 = ReplaceStr(buf2,"(<key>position</key>[^<]*)(<string>)([0-9]*)(</string>)","$1<integer>$3</integer>");std::cout << result2 << std::endl;system("pause");return 0;
}````输出<div class="se-preview-section-delimiter"></div>``` XML
Test regex group 1
You haven't installed QQPCMgr on this computer. Please download and install the
latest QQPCMgr first, then reboot the program.
Test regex group 2
<key>name</key><string>百度</string><key>position</key><integer>2</integer></dic
t><key>05975BCB-FD95-48A4-A912-37ECACD39871</key><dict><key>name</key><string>必
应</string><key>url</key><string>http://www.bing.com/</string><key>position</key
><integer>3</integer>

参考

std::regex_replace
使用正则表达式库regex


http://www.ppmy.cn/news/541214.html

相关文章

阿波罗登月计算机技术,你知道吗,阿波罗登月用的计算机还不如你家计算器!...

说起宇宙飞船&#xff0c;绝大部分人的脑海中会蹦出一个词&#xff1a;高大上。每次发射至少都是千万级别的。照这么说&#xff0c;宇宙飞船用的计算机一定都是高配啦。 但&#xff0c;事实貌似不是这样。 令人大跌眼镜的是&#xff0c;天宫一号使用的cpu时钟频率仅10MhZ&#…

19岁的少年发明一款机械计算器,载入史册

1642年&#xff0c;19岁的布莱斯帕斯卡尔发明了他的滚轮式加法器&#xff0c;名为Pascaline&#xff08;帕斯卡林&#xff09;&#xff0c;以帮助他的父亲为法国税务员征税。 Pascaline 是有史以来第一台包含数据携带机制的计算器。凭借该发明&#xff0c;帕斯卡获得了法国国王…

爆改古董卡西欧计算器!能联网、能聊天,「作弊神器」只要150块

晓查 郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一台朴实无华的计算器&#xff0c;卡西欧牌。 看起来和千万学子们所使用的计算器一样&#xff0c;没什么特别的&#xff0c;还带着一些陈旧的使用痕迹。 但如果你用磁铁碰一下&#xff1a; 咦&#xff0c;简直像打开了探险…

avi视频文件太大怎么变小

avi视频格式的优点是图像质量好,但是其缺点是体积过于庞大,而且更加糟糕的是压缩标准不统一。avi视频文件太大怎么变小&#xff1f;对于我这个日常工作都是和视频打交道的&#xff0c;新媒体人来说曾经是一个难题。但现阶段的全民在线学习时期&#xff0c;我们只要细心留意就能…

[转载]vfw的AVI族函数读取AVI文件

#include "vfw.h"#pragma comment(lib, "vfw32.lib") #pragma comment(lib, "Winmm.lib")AVIFileInit();PAVIFILE pAviFile nullptr;// 打开AVI文件 int nRet AVIFileOpen(&pAviFile, "10.82.27.20_00_201908231542_part0.avi",…

图像的压缩与恢复

一个图像是如何数字化的呢?不妨从一张玩具鸭子图片说起。 首先要把图片打格子分成若干小块,每块用一个数字来表示一种颜色。如果图像是纯黑白两色的,那每块只用1或0表示即可。若图像是16色的,每块用4位二进 数表示,因为2^4=16,即4位二进制有16种组合,每种组合表示一种颜…

PR进行jpeg的帧压缩,并导出为avi视频

目前比较推崇的方案&#xff1a; 1、在PR中设置序列的属性&#xff1b; 2、调整好输出的分辨率&#xff08;即你的期望&#xff09;&#xff1b; 3、导出为mp4&#xff1b; 4、使用imagJ将MP4转换为avi格式&#xff1b; run("Movie (FFMPEG)...", "choose./…

OpenCV教程(11)-- 图像压缩操作

前言 图片压缩应用很广泛&#xff0c;如生成缩略图等。前期我在进行图片处理的过程中碰到了一个问题&#xff0c;就是如何将图片压缩到指定尺寸&#xff0c;此处尺寸指的是生成图片文件的大小。 我使用 opencv 进行图片处理&#xff0c;于是想着直接使用 opencv 进行图片压缩…