C++11新特性_标准库_正则表达式库

C++11 引入了标准正则表达式库 <regex>,它提供了强大且灵活的文本匹配和替换功能。下面为你详细介绍该库的相关内容,包括主要组件、使用方法、示例代码等。

主要组件

  • std::regex:用于表示一个正则表达式对象,可通过构造函数将字符串形式的正则表达式转换为内部表示形式。
  • std::smatch:用于存储字符串匹配的结果,包含了匹配的子字符串及其位置等信息。
  • std::regex_match:用于判断整个输入字符串是否与正则表达式匹配。
  • std::regex_search:用于在输入字符串中查找与正则表达式匹配的子字符串。
  • std::regex_replace:用于将输入字符串中与正则表达式匹配的部分替换为指定的字符串。

使用方法

1. 基本匹配

#include <iostream>
#include <regex>
#include <string>int main() {std::string input = "hello world";std::regex pattern("hello");if (std::regex_search(input, pattern)) {std::cout << "找到匹配项" << std::endl;} else {std::cout << "未找到匹配项" << std::endl;}return 0;
}

在上述代码中,首先定义了一个输入字符串 input 和一个正则表达式对象 pattern,然后使用 std::regex_search 函数在 input 中查找与 pattern 匹配的子字符串。

2. 完整匹配

#include <iostream>
#include <regex>
#include <string>int main() {std::string input = "hello";std::regex pattern("hello");if (std::regex_match(input, pattern)) {std::cout << "完全匹配" << std::endl;} else {std::cout << "不完全匹配" << std::endl;}return 0;
}

这里使用 std::regex_match 函数判断 input 是否与 pattern 完全匹配。

3. 捕获组

#include <iostream>
#include <regex>
#include <string>int main() {std::string input = "John Doe, 25";std::regex pattern("(\\w+) (\\w+), (\\d+)");std::smatch matches;if (std::regex_search(input, matches, pattern)) {std::cout << "姓名: " << matches[1] << " " << matches[2] << std::endl;std::cout << "年龄: " << matches[3] << std::endl;}return 0;
}

通过在正则表达式中使用括号 () 定义捕获组,std::smatch 对象 matches 可以存储每个捕获组匹配的结果,通过索引访问这些结果。

4. 替换操作

#include <iostream>
#include <regex>
#include <string>int main() {std::string input = "Hello, World!";std::regex pattern("World");std::string replacement = "C++";std::string result = std::regex_replace(input, pattern, replacement);std::cout << "替换后的字符串: " << result << std::endl;return 0;
}

使用 std::regex_replace 函数将 input 中与 pattern 匹配的部分替换为 replacement

注意事项

  • 正则表达式语法:C++ 的正则表达式库支持多种正则表达式语法,如 ECMAScript、basic、extended 等,默认使用 ECMAScript 语法。
  • 性能问题:正则表达式匹配可能会带来一定的性能开销,特别是对于复杂的正则表达式和长字符串,使用时需要注意性能优化。
  • 异常处理:在构造 std::regex 对象时,如果正则表达式语法错误,会抛 std::regex_error 异常,需要进行适当的异常处理。

 

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

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

相关文章

【多线程】七、POSIX信号量 环形队列的生产者消费者模型

文章目录 Ⅰ. 信号量一、POSIX 信号量的概念二、POSIX 信号量的类型区别三、POSIX 信号量与 SystemV 信号量的区别Ⅱ. 线程信号量基本原理一、为什么要引入信号量❓二、PV 操作三、POSIX 信号量的实现原理四、CAS操作介绍Ⅲ. POSIX未命名信号量接口一、初始化无名信号量二、销毁…

ES基本使用方式

ES基本使用 文章目录 ES基本使用1.es的访问使用URL访问 2.mapping的理解Dynamic Mappingkeyword 与 text的区别‌基础定义与核心差异主字段&#xff0c;子字段 创建mapping 3.创建索引4.查看索引列表5.删除索引6.添加数据7.查询数据 重置es密码&#xff0c;初始用户elastic el…

玩转Docker | 使用Docker部署AI证件照工具

玩转Docker | 使用Docker部署AI证件照工具 前言一、HivisionIDPhotos介绍项目简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署HivisionIDPhotos服务下载镜像创建容器创建容器检查容器状态检查服务端口安全设置四、访问HivisionIDPhotos服务访…

【掌握 DDL】:SQL 中的数据库与表管理

掌握 DDL&#xff1a;SQL 中的数据库与表管理 掌握 DDL&#xff1a;SQL 中的数据库与表管理数据库 DDL创建数据库查看数据库查看所有数据库查看数据库创建语句 进入数据库删除数据库备份数据库备份恢复 查看数据库连接深入理解数据库创建与删除数据库字符集与校验规则 表 DLL创…

基于「骑手外卖系统」串联7大设计原则

你说得对&#xff01;这些设计原则听起来都很抽象、很“玄”&#xff0c;如果不是实际开发过系统&#xff0c;很难理解“到底为什么要这样设计”。 那我现在就用一个你能想象得很清楚的真实例子&#xff0c;帮你把这7个设计原则一一落地到具体情境里&#xff0c;你会一眼明白。…

基于轻量化YOLO的车载设备实时视频目标检测方案

一、背景与需求 在智能汽车后装市场,设备的视觉感知能力日益成为差异化竞争点。传统后装产品主要关注车辆诊断和位置跟踪,但在智能辅助驾驶(ADAS)与车联网(V2X)大潮下,如果能在已有硬件平台上新增“视频级行人、车辆、交通标志检测”功能,不仅可提升安全预警,也能为后…

HTTPS协议:更安全的HTTP

目录 1. 前言 2. HTTP 与 HTTPS&#xff1a;安全的分水岭 2.1 HTTP 的安全隐患 2.2 HTTPS 的安全提升 3. HTTPS 的核心概念 3.1 加密三剑客&#xff1a;对称加密、非对称加密与哈希算法 3.2 SSL/TLS 握手过程&#xff1a;建立安全通道的关键步骤 3.3 数字证书&#xff…

使用 Go 和 Gorgonia 实现图像验证码识别系统

本文将介绍如何使用 Go 语言结合 Gorgonia 构建一个简单的图像验证码识别模型。Gorgonia 是一个专为机器学习打造的计算图库&#xff0c;在 Go 中支持自动微分与深度学习构建。 1. 项目依赖 首先安装 Go 语言环境和 Gorgonia&#xff1a; 登录后复制 go install gorgonia.org/g…

list的两种设计

1. 内存布局对比 (1) MSVC 的实现 cpp class _List_node {_List_node* _Next; // 指向下一个节点_List_node* _Prev; // 指向前一个节点_Value_type _Value; // 存储的数据 }; 特点&#xff1a; 每个节点包含两个指针和一个数据成员。 Debug 模式&#xff1a;可能添加迭代…

多多铃声 7.4| 拥有丰富的铃声曲库,满足不同用户的个性化需求,支持一键设置手机铃声

多多铃声是一款提供丰富铃声资源的应用程序&#xff0c;它拥有广泛的铃声曲库&#xff0c;涵盖各种风格和类型&#xff0c;能够满足不同用户的个性化需求。该应用程序支持分类浏览和热门榜单功能&#xff0c;让用户可以轻松找到当前最流行或自己感兴趣的铃声。此次分享的版本为…

Day04 新增套餐

###今天的任务主要是自主完成套餐管理的模块### 1.新增套餐 在前端页面接口中我们可以看到在新增套餐的时候需要选择添加到菜单中的菜品 因此我们需要设计一个接口可以通过根据分类id&#xff08;category_id&#xff09;来查询该分类下的菜品 1.1根据分类id查询分类下的菜…

数据赋能(208)——质量管理——及时性原则

概述 在数据处理、分析和应用过程中&#xff0c;数据及时性原则确保了数据在需要时能够迅速、准确地被获取、更新和传递&#xff0c;为决策和业务需求提供了时效性保障。能够反映当前的真实状况&#xff0c;为决策提供最新、最准确的信息支持。这种及时性不仅有助于企业快速响…

华为OD机试真题——告警抑制(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C、GO六种语言的最佳实现方式&#xff1b; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析&#xff1b; 本文收录于专栏&#xff1a;《2025华为OD真题目录…

ASP.NET MVC​ 入门指南四

21. 高级路由配置 21.1 自定义路由约束 除了使用默认的路由约束&#xff0c;你还可以创建自定义路由约束。自定义路由约束允许你根据特定的业务逻辑来决定一个路由是否匹配。例如&#xff0c;创建一个只允许特定年份的路由约束&#xff1a; csharp public class YearRouteCo…

测试基础笔记第十八天

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、web自动化1.xpath定位1.属性定位2.属性与逻辑结合3.属性和层级结合 2.常见元素定位方法&#xff08;面试题&#xff09;3.常见元素定位失败原因4.cookie1.验证码…

(笔记)List

一、List的介绍和使用 1.List的介绍 1.1 list是可以在任意常数范围内插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 1.2 list底层是双向链表结构&#xff0c;双向链表中每个元素都储存在互不相关的独立节点中&#xff0c;在节点中通过指针指向前其前一个…

重载和覆写有什么区别?

重载&#xff08;Overload&#xff09;和覆写&#xff08;Override&#xff0c;也叫重写 &#xff09;是面向对象编程中的重要概念&#xff0c;它们有以下区别&#xff1a; 定义 - 重载&#xff1a;在同一类中&#xff0c;允许存在多个方法名相同&#xff0c;但参数列表&#x…

flask 获取各种请求数据:GET form-data x-www-form-urlencoded JSON headers 上传文件

在 Flask 里&#xff0c;能使用多种方法获取不同类型的请求数据&#xff0c;下面详细介绍常见请求数据的获取方式。 获取查询字符串参数&#xff08;GET 请求&#xff09; 查询字符串参数一般在 URL 里&#xff0c;以 ?key1value1&key2value2 这种形式存在。可通过 requ…

人工智能助力工业制造:迈向智能制造的未来

在当今数字化转型的浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐渐成为推动工业制造领域变革的核心力量。智能制造作为工业 4.0 的重要组成部分&#xff0c;通过将 AI 技术与传统制造工艺深度融合&#xff0c;正在重塑整个生产流程&#xff0c;提高生产效率、…

【java八股文】深入浅出synchronized优化原理

&#x1f50d; 开发者资源导航 &#x1f50d;&#x1f3f7;️ 博客主页&#xff1a; 个人主页&#x1f4da; 专栏订阅&#xff1a; JavaEE全栈专栏 synchronized优化原理 synchronized即使悲观锁也是乐观锁&#xff0c;拥有自适应性。 jvm内部会统计每个锁的竞争激烈程度&…