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`异常

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐