Docker架构
C 正则表达式的匹配和替换
在C 11及以上版本中,``库提供了正则表达式功能,包含匹配、搜索和替换操作。以下是核心组件和示例:
核心组件
1. `std::regex`
存储正则表达式模式,例如:`std::regex pattern( (匹配数字)
2. `std::smatch`
存储匹配结果(针对`std::string`)
3. 匹配函数
`std::regex_match()`:完全匹配整个字符串
`std::regex_search()`:搜索部分匹配
4. 替换函数
`std::regex_replace()`:替换所有匹配项
---
示例代码
#1. 基础匹配
cpp
#include
#include
#include
int main() {
std::string text = 3年10月n std::regex pattern(Rd{4}) // 匹配4位数字
if (std::regex_search(text, pattern)) {
std::cout << 年份!::endl;
} else {
std::cout << 找到年份::endl;
}
return 0;
}
输出:
找到年份!
#2. 提取匹配结果
cpp
std::string text = 电话: 123-4567nstd::regex pattern(R((d{3})-(d{4})) // 分组匹配
std::smatch matches;
if (std::regex_search(text, matches, pattern)) {
std::cout << 匹配: < matches[0] << std::endl; // 123-4567
std::cout << 1: << matches[1] << std::endl; // 123
std::cout << 2: << matches[2] << std::endl; // 4567
}
#3. 替换文本
cpp
std::string text = : $99.9, 折扣: $20nstd::regex pattern(R($d .?d*) 匹配$数字
// 替换所有价格为[REDACTED]
std::string result = std::regex_replace(text, pattern, REDACTED]::cout << result << std::endl;
输出:
价格: [REDACTED], 折扣: [REDACTED]
---
关键语法说明
- 特殊字符转义:使用`R...)字符串避免双重转义
- 常用符号:
`d`:数字
`w`:字母/数字/下划线
`{n}`:精确匹配n次
`()`:捕获分组
- 替换规则:
`$&`:引用整个匹配项
`$n`:引用第n个分组(如`$1`)
---
进阶应用
cpp
// 日期格式替换:YYYY-MM-DD → DD/MM/YYYY
std::string date = 2023-10-05nstd::regex pattern(R((d{4})-(d{2})-(d{2}))nstd::string new_date = std::regex_replace(date, pattern, /$2/$1n
std::cout << new_date << std::endl; // 输出: 05/10/2023
> 注意:
>正则表达式编译较耗时,建议复用`std::regex`对象
>复杂模式需测试(可用在线工具如[regex101](https://regex101.com/)验证)
>异常处理:非法模式会抛出`std::regex_error`异常
更多推荐

所有评论(0)