[原创](Modern C++)现代C++的关键性概念: 正则表达式

常用网名: 猪头三
出生日期: 1981.XX.XX
企鹅交流: 643439947
个人网站: 80x86汇编小站
编程生涯: 2001年~至今[共24年]
职业生涯: 22年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
在C++11之前, C++标准库并未提供官方的正则表达式支持, 通常需要依赖第三方库(如Boost.Regex)或使用C语言的POSIX正则表达式库(regex.h). 然而, 这些方案存在一定的局限性, 例如跨平台支持较差、接口风格与C++标准库不统一等. 自C++11开始, 标准库(头文件)正式引入了正则表达式支持, 使C++能够使用符合ECMAScript标准的正则表达式进行字符串匹配、查找、替换等操作. 

[std::regex功能简单说明]
std::regex(正则表达式对象)
std::regex_match(完全匹配)
std::regex_search(查找匹配)
std::regex_replace(替换匹配内容)
迭代器 std::sregex_iterator、std::wsregex_iterator 用于遍历匹配结果

[代码示例]
以下代码展示了如何使用std::wregex 处理包含日期信息的字符串, 并提取其中符合格式的日期.

#include <iostream>
#include <regex>
#include <string>int main()
{// 定义一个包含日期信息的宽字符串std::wstring wstr_Info{ LR"("2024-03-05 00:00:00","2024-03-04 00:00:00")"};// 定义一个匹配日期格式的正则表达式std::wregex regex_Date{ LR"(\d{4}-\d{2}-\d{2})" };/**  使用std::regex_search函数查找第一个匹配项, 并打印出来. *  通过不断更新wstr_Info_Temp的起始位置为上一次匹配之后的内容, 实现迭代搜索. */std::wstring wstr_Info_Temp{ wstr_Info };for (std::wsmatch wsm; std::regex_search(wstr_Info_Temp, wsm, regex_Date);){std::wcout << wsm.str() << std::endl;  // 打印匹配的日期字符串wstr_Info_Temp = wsm.suffix();          // 更新起始位置为上一次匹配之后的内容}/**  使用std::wsregex_iterator来遍历所有匹配项, 并打印出来. *  这种方法更简洁, 但需要将整个输入序列传递给迭代器构造函数. */for (std::wsregex_iterator Search(wstr_Info.begin(), wstr_Info.end(), regex_Date);Search != std::wsregex_iterator{};++Search){std::wcout << Search->str() << std::endl;  // 打印匹配的日期字符串}return 0;
}

[总结]
在本篇文章中, 介绍了C++标准库中正则表达式的基本概念, 并讲解了如何在现代C++(C++11及以上)中使用std::regex进行字符串匹配. 通过std::regex_search和std::wsregex_iterator可以提取匹配的文本. 正则表达式是一个强大的文本处理工具, 在C++应用开发中, 它可以用于数据解析、日志分析、输入验证等多种场景. 希望本篇文章能帮助读者更好地理解和使用C++的正则表达式功能.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sobel边缘检测算法

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 Sobel边缘检测算法是一种用于图像处理中的边缘检测方法&#xff0c;它能够突出图像中灰度变化剧烈的地方&#xff0c;也就是边缘。该算法通过计算图像在水平方向和垂直方向上的梯度来检测边缘&#xff0c;梯度值越大…

Google Chrome-便携增强版[解压即用]

Google Chrome-便携增强版 链接&#xff1a;https://pan.xunlei.com/s/VOI0OyrhUx3biEbFgJyLl-Z8A1?pwdf5qa# a 特点描述 √ 无升级、便携式、绿色免安装&#xff0c;即可以覆盖更新又能解压使用&#xff01; √ 此增强版&#xff0c;支持右键解压使用 √ 加入Chrome增强…

FLTK - FLTK1.4.1 - demo - bitmap

文章目录 FLTK - FLTK1.4.1 - demo - bitmap概述笔记END FLTK - FLTK1.4.1 - demo - bitmap 概述 // 功能 : 演示位图数据在按钮上的显示 // * 以按钮为范围或者以窗口为范围移动 // * 上下左右, 文字和图像的相对位置 // 失能按钮&#xff0c;使能按钮 // 知识点 // FLTK可…

分布式数据库架构与实践:原理、设计与优化

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 随着大数据和云计算的快速发展&#xff0c;传统单机数据库已难以满足大规模数据存储和高并发访问的需求。分布式数据库&…

设计模式Python版 桥接模式

文章目录 前言一、桥接模式二、桥接模式示例三、桥接模式与适配器模式的联用 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&…

携程Android开发面试题及参考答案

在项目中,给别人发的动态点赞功能是如何实现的? 数据库设计:首先要在数据库中为动态表添加一个点赞字段,用于记录点赞数量,同时可能需要一个点赞关系表,记录用户与动态之间的点赞关联,包括点赞时间等信息。界面交互:在 Android 界面上,为点赞按钮设置点击事件监听器。…

【C语言】main函数解析

文章目录 一、前言二、main函数解析三、代码示例四、应用场景 一、前言 在学习编程的过程中&#xff0c;我们很早就接触到了main函数。在Linux系统中&#xff0c;当你运行一个可执行文件&#xff08;例如 ./a.out&#xff09;时&#xff0c;如果需要传入参数&#xff0c;就需要…

CSS核心

CSS的引入方式 内部样式表是在 html 页面内部写一个 style 标签&#xff0c;在标签内部编写 CSS 代码控制整个 HTML 页面的样式。<style> 标签理论上可以放在 HTML 文档的任何地方&#xff0c;但一般会放在文档的 <head> 标签中。 <style> div { color: r…

传奇引擎游戏微端的作用

传奇引擎游戏微端是一种优化的游戏客户端分发与运行方式&#xff0c;其主要目的是通过减少玩家的下载压力和提升游戏启动速度&#xff0c;让玩家更快地进入游戏。微端在传奇私服以及其他网络游戏中广泛使用&#xff0c;尤其适用于容量较大的游戏客户端。下面从作用、实现原理和…

从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(基础组件实现)

目录 基础组件实现 如何将图像和文字显示到OLED上 如何绘制图像 如何绘制文字 如何获取字体&#xff1f; 如何正确的访问字体 如何抽象字体 如何绘制字符串 绘制方案 文本绘制 更加方便的绘制 字体附录 ascii 6x8字体 ascii 8 x 16字体 基础组件实现 我们现在离手…

吴晓波 历代经济变革得失@简明“中国经济史” - 读书笔记

目录 《历代经济变革得失》读书笔记一、核心观点二、主要内容&#xff08;一&#xff09;导论&#xff08;二&#xff09;春秋战国时期&#xff08;三&#xff09;汉代&#xff08;四&#xff09;北宋&#xff08;五&#xff09;明清时期&#xff08;六&#xff09;近现代&…

Theorem

Theorem 打开题&#xff1a; from Crypto.Util.number import *from gmpy2 import *flag bxxxm bytes_to_long(flag) #flaglong_to_bytes(m)p getPrime(512) #随机生成一个512位的素数pq next_prime(p) #p之后的下一个…

变量的作用域和生命周期

一、根据变量的作用域不同&#xff0c;可分为 局部变量 和 全局变量 1. 作用域&#xff1a;变量起作用的范围&#xff08;变量定义之后&#xff0c;在哪里可以访问变量&#xff09;。 就近原则&#xff1a;当不同作用域里面有两个或者多个同名变量&#xff0c;那么遵循就近原…

力扣【669. 修剪二叉搜索树】Java题解

一开始在想为什么题目说存在唯一答案。然后发现是二叉搜索树就合理了。如下图&#xff1a;如果0节点小于low&#xff0c;那其左子树也都小于low&#xff0c;故可以排除&#xff1b;对于4&#xff0c;其右子树也是可以排除。 代码如下&#xff1a; class Solution {public Tre…

论文阅读:Realistic Noise Synthesis with Diffusion Models

这篇文章是 2025 AAAI 的一篇工作&#xff0c;主要介绍的是用扩散模型实现对真实噪声的仿真模拟 Abstract 深度去噪模型需要大量来自现实世界的训练数据&#xff0c;而获取这些数据颇具挑战性。当前的噪声合成技术难以准确模拟复杂的噪声分布。我们提出一种新颖的逼真噪声合成…

群晖Alist套件无法挂载到群晖webdav,报错【连接被服务器拒绝】

声明&#xff1a;我不是用docker安装的 在套件中心安装矿神的Alist套件后&#xff0c;想把夸克挂载到群晖上&#xff0c;方便复制文件的&#xff0c;哪知道一直报错&#xff0c;最后发现问题出在两个地方&#xff1a; 1&#xff09;挂载的路径中&#xff0c;直接填 dav &…

使用C# 如何获取本机连接的WIFI名称[C# ---1]

前言 楼主最近在写一个WLAN上位机&#xff0c;遇到了使用C#查询SSID 的问题。CSDN上很多文章都比较老了&#xff0c;而且代码过于复杂。楼主自己想了一个使用CMD来获得SSID的方法 C#本身是没有获得WINDOWS网路信息的能力&#xff0c;必须要用系统API&#xff0c;WMI什么的&…

玩转大语言模型——配置图数据库Neo4j(含apoc插件)并导入GraphRAG生成的知识图谱

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…

实战:如何快速让新网站被百度收录?

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/22.html 要让新网站快速被百度收录&#xff0c;可以采取以下实战策略&#xff1a; 一、网站基础优化 网站结构清晰&#xff1a;确保网站的结构简洁清晰&#xff0c;符合百度的抓取规则。主…

全程Kali linux---CTFshow misc入门(25-37)

第二十五题&#xff1a; 提示&#xff1a;flag在图片下面。 直接检查CRC&#xff0c;检测到错误&#xff0c;就直接暴力破解。 暴力破解CRC的python代码。 import binascii import struct def brute_force_ihdr_crc(filename): # 读取文件二进制数据 with open(filen…