C++ 正则表达式_regex

C++ 的正则表达式功能通过标准库 <regex> 提供,自 C++11 起被纳入标准。它允许你进行模式匹配、搜索、替换等操作,核心围绕几个关键类和函数展开。下面从基础开始讲解:

一、核心组件

使用前需包含头文件并使用标准命名空间:
cppRun

#include <regex>
#include <string>
#include <iostream>
using namespace std; // 简化代码,实际项目可按需使用


主要类和函数:

  • std::regex:存储正则表达式模式的对象(编译后的模式)。

  • std::smatch:存储匹配结果的容器(用于字符串匹配),包含整个匹配文本和捕获组。

  • std::regex_match完全匹配(整个字符串必须符合模式)。

  • std::regex_search部分匹配(字符串中存在符合模式的子串即可)。

  • std::regex_replace:替换匹配到的子串。

二、基础用法示例

1. 完全匹配(regex_match)

检查整个字符串是否符合模式(比如验证手机号、邮箱等)。


示例:验证是否为纯数字字符串
cppRun

	int main() {
    string s = "123456";
    regex pattern("\\d+"); // \d+ 表示1个或多个数字(C++中\需转义为\\)
    
    bool is_match = regex_match(s, pattern);
    cout << (is_match ? "匹配" : "不匹配") << endl; // 输出:匹配
    
    return 0;
}
2. 部分匹配与捕获组(regex_search + smatch)

搜索字符串中符合模式的子串,并提取匹配的内容(包括捕获组)。


示例:从文本中提取邮箱地址(简单模式)
cppRun

int main() {
    string text = "我的邮箱是abc123@example.com,你的是xyz@test.cn";
    regex email_pattern("(\\w+)@(\\w+\\.\\w+)"); // 捕获组1:用户名,组2:域名
    
    smatch result; // 存储匹配结果
    if (regex_search(text, result, email_pattern)) {
        cout << "找到邮箱:" << result.str() << endl; // 整个匹配:abc123@example.com
        cout << "用户名:" << result[1].str() << endl; // 捕获组1:abc123
        cout << "域名:" << result[2].str() << endl;   // 捕获组2:example.com
    }
    
    return 0;
}
3. 替换匹配内容(regex_replace)

将匹配到的子串替换为指定内容。


示例:替换所有数字为*
cppRun

int main() {
    string text = "密码是123456,验证码是789";
    regex num_pattern("\\d"); // 匹配单个数字
    
    string replaced = regex_replace(text, num_pattern, "*");
    cout << replaced << endl; // 输出:密码是******,验证码是***
    
    return 0;
}

三、常用元字符与模式

正则表达式的模式由元字符构成,常用的有:

  • .:匹配任意单个字符(除换行)。

  • *:匹配前一个元素 0 次或多次(如 a* 匹配 """a""aa" 等)。

  • +:匹配前一个元素 1 次或多次(如 a+ 至少 1 个a)。

  • ?:匹配前一个元素 0 次或 1 次(如 a? 可选 1 个a)。

  • ^:匹配字符串开头(如 ^abc 匹配以abc开头的字符串)。

  • :匹配字符串结尾(如 xyz$ 匹配以xyz结尾的字符串)。

  • []:字符集,匹配其中任意一个字符(如 [0-9a-zA-Z] 匹配数字或字母)。

  • ():捕获组,用于提取子匹配(如 (abc) 可通过result[1]获取)。

  • \\d:匹配数字(等价于 [0-9])。

  • \\w:匹配字母、数字、下划线(等价于 [a-zA-Z0-9_])。

四、注意事项

  1. 转义字符:C++ 字符串中\需要转义为\\,因此正则中的\d在 C++ 中需写为\\d

  2. C++ 版本<regex>是 C++11 引入的,编译时需开启 C11 及以上标准(如g++ -std=c++11 main.cpp)。

  3. 性能:复杂的正则表达式可能影响性能,建议根据场景优化模式。

  4. 匹配模式regex构造时可指定模式(如忽略大小写regex::icase):cppRun

    regex pattern("hello", regex::icase); // 忽略大小写匹配"hello"
    

    通过以上内容,你可以开始使用 C++ 正则表达式处理文本匹配、提取和替换等任务。实际使用中,可结合具体场景调整正则模式(如更复杂的邮箱验证、URL 解析等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值