[原创](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 处理包含日期信息的字符串, 并提取其中符合格式的日期.

cpp 复制代码
#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++的正则表达式功能.

相关推荐
geooorge1 小时前
PAT甲级1052、Linked LIst Sorting
c++·算法
charlie1145141911 小时前
高阶开发基础——快速入门C++并发编程6——大作业:实现一个超级迷你的线程池
开发语言·c++·并发编程·基础学习
tan77º1 小时前
【MySQL】表的操作
开发语言·数据库·c++·mysql
来恩10032 小时前
C# 字符串与正则表达式介绍
数据库·正则表达式·c#
一水鉴天2 小时前
为AI聊天工具添加一个知识系统 之75 详细设计之16 正则表达式 之3 正则表达式模板
人工智能·正则表达式
0xCC说逆向3 小时前
Windows图形界面(GUI)-QT-C/C++ - QT Stacked Widget
c语言·开发语言·c++·windows·qt·win32
小乌龟不会飞3 小时前
C++的类型转换
c++
刘小炮吖i4 小时前
正则表达式超详细讲解
java·正则表达式
阿猿收手吧!4 小时前
【分布式】服务端高并发分布式结构演进
开发语言·c++·redis·分布式