C++ Primer 5th笔记(chap 17 标准库特殊设施)regex_replace
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 17 标准库特殊设施)regex_replace相关的知识,希望对你有一定的参考价值。
1. 定义
在输入序列中查找并替换一个正则表达式
操作 | 解释 |
---|---|
m.format(dest, fmt, mft), m.format(fmt, mft) | 使用格式字符串fmt生成格式化输出,匹配在m中,可选的match_flag_type标志在mft中。第一个版本写入迭代器dest指向的目的为止,并接受fmt参数,可以是一个string,也可以是一个指向空字符结尾的字符数组的指针。mft的默认值是format_default。 |
rege_replace(dest, seq, r, fmt, mft), regex_replace(seq, r, fmt, mft) | 遍历seq,用regex_search查找与regex对象r相匹配的子串,使用格式字符串fmt和可选的match_flag_type标志来生成输出。mft的默认值是match_default |
eg.
string phone = "(\\\\()?(\\\\d{3})(\\\\))?([-. ])?(\\\\d{3})([-. ]?)(\\\\d{4})"
string fmt = "$2.$5.$7"; // 将号码格式改为ddd.ddd.dddd
regex r(phone); // 用来寻找模式的regex对象
string number = "(908) 555-1800";
cout << regex_replace(number, r, fmt) << endl;
输出为:
908.555 . 1800
只替换输入序列的一部分
正则表达式更有意思的一个用处是替换一个大文件中的电话号码。
eg.
有一个保存人名及其电话号码的文件:
morgan (201) 555-2368 862-555-0123
drew (973) 555.0130
lee (609) 555-0132 2015550175 800.555-0000
我们希望将数据转换为下面这样:
morgan 201.555. 2368 862.555 . 0123
drew 973.555 . 0130
lee 609.555 . 0132 201.555 . 0175 800.555 . 0000
int main ( )
{
string phone = "(\\\\()?(\\\\d{3})(\\\\))?([-. ])?(\\\\d{3})([-. ]?)(\\\\d{4})";
regex r (phone); // 寻找模式所用的 regex 对象
smatch m;
string s;
string fmt = "$2.$5.$7"; //将号码格式改为 ddd.ddd.dddd
// 从输入文件中读取每条记录
while (getline (cin, s))
cout << regex_replace (s, r, fmt) << endl;
return 0;
}
以上是关于C++ Primer 5th笔记(chap 17 标准库特殊设施)regex_replace的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer 5th笔记(chap 17 标准库特殊设施)输出补白
C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型
C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式
C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 返回多个值