C++学习,标准库 <regex>

C++11 引入了 <regex> 标准库,用于处理正则表达式。这个库提供了一系列类和函数,使得在 C++ 中进行复杂的字符串匹配、搜索和替换操作变得更加方便和高效。正则表达式是一种强大的文本处理工具,广泛应用于数据验证、文本分析和模式匹配等领域。

正则表达式是一种使用单个字符串来描述、匹配一系列符合某个句法规则的字符串的模式。在 C++ 中,正则表达式通过 <regex> 库实现。

正则表达式组成
字符类:   如 [abc] 表示匹配 a、b 或 c 中的任意一个字符。
量词:       如 *(零次或多次)、+(一次或多次)、?(零次或一次)。
边界匹配:如 ^(行的开始)、$(行的结束)。
分组:       使用圆括号 () 来创建一个分组。

C++ <regex> 库的主要类和函数
std::regex:表示一个正则表达式对象。
std::regex_match:检查整个字符串是否与正则表达式完全匹配。
std::regex_search:在字符串中搜索与正则表达式匹配的部分。
std::regex_replace:用指定的字符串替换与正则表达式匹配的部分。
std::smatch:用于存储标准字符串(std::string)的匹配结果。
std::cmatch:用于存储 C 风格字符串(const char*)的匹配结果。
std::regex_iterator:用于迭代字符串中所有匹配正则表达式的部分。

示例:

匹配整个字符串
#include <iostream>  
#include <regex>  
#include <string>  
  
int main() {  
    std::string str = "Hello, World!";  
    std::regex pattern("^Hello, World!$");  
  
    if (std::regex_match(str, pattern)) {  
        std::cout << "The string matches the pattern." << std::endl;  
    } else {  
        std::cout << "The string does not match the pattern." << std::endl;  
    }  
  
    return 0;  
}

搜索字符串中的匹配部分
#include <iostream>  
#include <regex>  
#include <string>  
  
int main() {  
    std::string str = "The quick brown fox jumps over the lazy dog.";  
    std::regex pattern("\\b\\w{4}\\b"); // 匹配四个字母的单词  
  
    std::smatch match;  
    while (std::regex_search(str, match, pattern)) {  
        std::cout << "Found: " << match.str() << std::endl;  
        str = match.suffix(); // 搜索剩余的字符串  
    }  
  
    return 0;  
}

替换匹配的部分
#include <iostream>  
#include <regex>  
#include <string>  
  
int main() {  
    std::string str = "The quick brown fox jumps over the lazy dog.";  
    std::regex pattern("\\b\\w{4}\\b"); // 匹配四个字母的单词  
    std::string replacement = "****";  
  
    std::string result = std::regex_replace(str, pattern, replacement);  
    std::cout << "Replaced string: " << result << std::endl;  
  
    return 0;  
}

使用 std::regex_iterator 迭代匹配结果
#include <iostream>  
#include <regex>  
#include <string>  
  
int main() {  
    std::string str = "abc def ghi abc";  
    std::regex pattern("abc");  
  
    auto begin = std::sregex_iterator(str.begin(), str.end(), pattern);  
    auto end = std::sregex_iterator();  
  
    for (std::sregex_iterator i = begin; i != end; ++i) {  
        std::smatch match = *i;  
        std::cout << "Found: " << match.str() << std::endl;  
    }  
  
    return 0;  
}

 

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

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

相关文章

【Unity】什么是定点数?定点数的实现原理(个人复习笔记/侵删/不足之处欢迎斧正)

什么是定点数&#xff1f;定点数的实现原理 什么是定点数&#xff1f; 约定计算机中小数点的位置&#xff0c;且这个位置固定不变&#xff0c;小数点前、后的数字&#xff0c;分别用二进制表示&#xff0c;然后组合起来就可以把这个数字在计算机中存储起来&#xff0c;这种表…

红日安全vulnstack (一)

目录 环境搭建 本机双网卡 Kali IP 靶机IP Web GetShell 前期信息收集 Yxcms后台模板 Getshell PHPMyAdmin日志 Getshell into outfile写入一句话 X phpmyadmin 日志写入一句话 后渗透 MSF 生成木马上线 提取用户hash值 **hash**加密方式 MSF权限Shell至CS CS …

如何使用FastAPI开发Serverless应用?

使用FastAPI开发Serverless应用是一种现代且高效的方法&#xff0c;它结合了FastAPI的高性能和Serverless架构的灵活性、可扩展性以及低成本。下面是一个基本指南&#xff0c;帮助你从零开始创建并部署一个FastAPI应用到Serverless环境。 1. 安装FastAPI和Uvicorn 首首先&…

基于springboot美食推荐商城的设计与实现

基于springboot美食推荐商城的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;https:…

CSS进阶-定位(二)

8、定位 定位元素的层级比普通元素高&#xff0c;定位元素之间的层级相等&#xff0c;若发生覆盖&#xff0c;则后写的元素覆盖在先写的元素上面。 属性名描述position:relative;相对定位&#xff08;相对默认位置进行定位&#xff0c;不脱离文档流&#xff0c;仍占据页面位置&…

91. 一段曲线颜色渐变

可以通过几何体顶点颜色.attributes.color数据&#xff0c;实现一段曲线颜色渐变效果。 样条曲线几何体 首先提供一个样条曲线生成的几何体。 const geometry new THREE.BufferGeometry(); //创建一个几何体对象 // 三维样条曲线 const curve new THREE.CatmullRomCurve3(…

【Next.js 项目实战系列】04-修改 Issue

原文链接 CSDN 的排版/样式可能有问题&#xff0c;去我的博客查看原文系列吧&#xff0c;觉得有用的话&#xff0c;给我的库点个star&#xff0c;关注一下吧 上一篇【Next.js 项目实战系列】03-查看 Issue 修改 Issue 添加修改 Button​ 本节代码链接 安装 Radix UI 的 Ra…

YOLO11 目标检测 | 导出ONNX模型 | ONNX模型推理

本文分享YOLO11中&#xff0c;从xxx.pt权重文件转为.onnx文件&#xff0c;然后使用.onnx文件&#xff0c;进行目标检测任务的模型推理。 用ONNX模型推理&#xff0c;便于算法到开发板或芯片的部署。 备注&#xff1a;本文是使用Python&#xff0c;编写ONNX模型推理代码的 目…

【Vercel】Vercel静态部署踩坑

背景 在现代的软件开发中&#xff0c;自动化部署是一个不可或缺的环节。Vercel作为一个流行的前端部署平台&#xff0c;提供了与GitHub的无缝集成&#xff0c;使得开发者能够在每次提交代码后自动触发部署流程。然而&#xff0c;自动化部署过程中可能会遇到一些挑战&#xff0…

全网免费的文献调研方法以及获取外网最新论文、代码和翻译pdf论文的方法(适用于硕士、博士、科研)

1. 文献调研 学术搜索引擎(十分推荐前三个&#xff0c;超有用)&#xff1a;使用 Google Scholar(https://scholar.google.com/)(https://scholar.google.com.tw/)(巨人学术搜索‬‬)、&#xff08;三个都可以&#xff0c;镜像网站&#xff09; arXiv(https://arxiv.org/)、&am…

qt页面设计

1. Designer 设计师&#xff08;掌握&#xff09; Designer是Qt内置的一款界面设计程序&#xff0c;设计的界面文件为.ui格式。 C程序员通常不会单独启动Designer&#xff0c;如果要在项目中使用Designer程序&#xff0c;只需要在新建项目时&#xff0c;勾选“创建界面文件”选…

学习C语言(25)

整理今天的学习内容 预处理详解 1.预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号是在预处理期间处理的 __FILE__&#xff08;进行编译的源文件&#xff09; __LINE__ &#xff08;文件当前的行号&#xff09; __DATE__&#xff08…

Visual Studio 2022安OpenCV可视化工具image watch

1. 打开 VS2022 &#xff0c;扩展 -管理扩展 2. 搜索 Image Watch 关闭VS2022 后 安装 打开视图、调出 Image Watch 窗口 测试代码&#xff1a; #include "opencv2/imgproc.hpp" #include "opencv2/imgcodecs.hpp" #include "opencv2/highgui.…

分布式系统中的Dapper与Twitter Zipkin:链路追踪技术的实现与应用

目录 一、什么是链路追踪&#xff1f; 二、核心思想Dapper &#xff08;一&#xff09;Dapper链路追踪基本概念概要 &#xff08;二&#xff09;Trace、Span、Annotations Trace Span Annotation 案例说明 &#xff08;三&#xff09;带内数据与带外数据 带外数据 带…

Android应用性能优化的方法

Android应用性能优化是一个复杂而关键的过程&#xff0c;涉及多个方面&#xff0c;包括布局优化、网络优化、安装包优化、内存优化、卡顿优化、启动优化等。以下是对这些优化方法的详细解析&#xff1a; 一、布局优化 布局优化是Android性能优化的基础&#xff0c;主要目标是…

【Linux】进程间通信---匿名管道、命名管道(超详解)

目录 匿名管道 管道的创建&#xff1a; 创建子进程&#xff1a; 关闭不需要的fd: 发送消息&#xff1a; 管道的5种特征&#xff1a; 管道的4种情况&#xff1a; 命名管道 创建命名管道&#xff1a; 删除命名管道&#xff1a; 手写命名管道&#xff1a; 完整代码&am…

C语言:函数指针与指针函数的区别*

文章目录 一、函数指针定义语法 二、指针函数定义语法用途 三、函数指针与指针函数的区别本质不同&#xff1a;声明方式&#xff1a; 四、结论 C语言&#xff1a;函数指针与指针函数的区别 在C语言这个充满灵活性和强大表达力的编程世界中&#xff0c;函数指针和指针函数是两个…

小班幼儿攻击性行为的现状研究-以德格县某幼儿园为例(开题报告)

毕业论文(设计)开题报告 题目 题目类别 毕业设计 姓名 专业 班级 学号 一、选题背景及依据(简述国内外研究状况和相关领域中已有的研究成果(文献综述),选题目的、意义,列出主要参考文献) (一)选题背景与依据 1、选题背景 幼儿教育作为个体一生教育的起点,对于儿童…

多线程(七):单例模式指令重排序

目录 1. 单例模式 1.1 饿汉模式 1.2 懒汉模式 2. 懒汉模式下的问题 2.1 线程安全问题 2.2 如何解决 --- 加锁 2.3 加锁引入的新问题 --- 性能问题 2.4 指令重排序问题 2.4.1 指令重排序 2.4.2 指令重排序引发的问题 1. 单例模式 单例模式, 是设计模式中最典型的一种模…

Vision China 2024 | 移远通信以一体化的AI训练及部署能力,引领3C电子制造智能升级

10月14日&#xff0c;由机器视觉产业联盟(CMVU)主办的中国机器视觉展(Vision China)在深圳国际会展中心盛大开幕。作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信应邀参加展会首日举办的“智造引领数质并进”3C电子制造自动化与数字化论坛。 论坛上&#xff0c;移…