C++正则表达式示例:实用指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C++正则表达式示例:从基础到实践



正则表达式(regex)是一种强大的工具,用于根据模式搜索、提取和替换文本片段。在C++中,对正则表达式的支持始于C++11标准,并在<regex>库中实现。在本文中,我们将分析std::regex的实际使用示例,帮助您在项目中高效地处理字符串。



1. std::regex基础:创建与简单搜索



在C++中使用正则表达式,主要涉及三个核心类:std::regex(模式)、std::smatch(字符串结果)和std::sregex_iterator(用于多次匹配的迭代器)。



示例1:检查字符串是否匹配模式

#include <iostream>#include <regex>#include <string>

int main() { std::string email = "user@example.com"; // 用于验证email的模式(简化版) std::regex pattern(R"([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})"); if (std::regex_match(email, pattern)) { std::cout << "Email有效!" << std::endl; } else { std::cout << "Email格式不正确。" << std::endl; } return 0;}


std::regex_match函数检查整个字符串是否完全匹配模式。注意使用R"(...)"——这是原始字符串字面量,可以避免转义反斜杠。



示例2:搜索子字符串

#include <iostream>#include <regex>#include <string>

int main() { std::string text = "我的号码:+7 (123) 456-78-90。请打给我!"; std::regex phone_pattern(R"(\\+7\\s?\\(\\d{3}\\)\\s?\\d{3}-\\d{2}-\\d{2})"); std::smatch match; if (std::regex_search(text, match, phone_pattern)) { std::cout << "找到号码:" << match.str() << std::endl; std::cout << "位置:" << match.position() << std::endl; } else { std::cout << "未找到号码。" << std::endl; } return 0;}


std::regex_search在字符串中搜索第一个匹配模式的结果。结果保存在std::smatch对象中,从中可以提取找到的子字符串及其位置。



2. 使用捕获组提取数据



捕获组允许提取匹配结果的各个部分。它们用圆括号()表示。



示例3:解析日期

#include <iostream>#include <regex>#include <string>

int main() { std::string date = "今天是15.04.2025"; std::regex date_pattern(R"((\\d{2})\\.(\\d{2})\\.(\\d{4}))"); std::smatch match; if (std::regex_search(date, match, date_pattern)) { std::cout << "完整日期:" << match[0] << std::endl; std::cout << "日:" << match[1] << std::endl; std::cout << "月:" << match[2] << std::endl; std::cout << "年:" << match[3] << std::endl; } return 0;}


示例4:使用迭代器提取所有匹配项

#include <iostream>#include <regex>#include <string>

int main() { std::string log = "ERROR: 文件未找到WARNING: 电池电量低INFO: 操作完成ERROR: 连接超时"; std::regex error_pattern(R"(^ERROR:\\s*(.+)$)"); // 使用std::sregex_iterator遍历所有行 auto words_begin = std::sregex_iterator(log.begin(), log.end(), error_pattern); auto words_end = std::sregex_iterator(); std::cout << "找到

博客

书籍推荐