C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- std::sub_match
- std::match_results
- std::basic_regex
- std::regex_search
- std::regex_replace
- std::regex_iterator
- std::regex_match
- std::regex_token_iterator
- std::regex_error
- std::regex_traits
- std::regex_constants::syntax_option_type
- std::regex_constants::match_flag_type
- std::regex_constants::error_type
- 改 ECMAScript 正则表达式文法
- 注释
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
std::regex_replace
定义于头文件 <regex>
|
||
template< class OutputIt, class BidirIt, class Traits, class CharT, |
(1) | (C++11 起) |
template< class OutputIt, class BidirIt, class Traits, class CharT > |
(2) | (C++11 起) |
template< class Traits, class CharT, class STraits, class SAlloc, |
(3) | (C++11 起) |
template< class Traits, class CharT, class STraits, class SAlloc > |
(4) | (C++11 起) |
template< class Traits, class CharT, class STraits, class SAlloc > |
(5) | (C++11 起) |
template< class Traits, class CharT > std::basic_string<CharT> |
(6) | (C++11 起) |
regex_replace
用正则表达式进行字符序列的替换:
[first,last)
中的字符到 out
,以 re
所格式化的字符替换任何匹配 fmt
的序列。换言之:- 如同以 std::regex_iterator<BidirIt, CharT, traits> i(first, last, re, flags) 构造 std::regex_iterator 对象
i
,并用它在序列[first,last)
内前进通过每个re
的匹配。 - 对于每个匹配
m
,如同用 out = std::copy(m.prefix().first, m.prefix().second, out) 复制非匹配子序列(m.prefix()
)到out
,然后如同通过调用 out = m.format(out, fmt, flags) ,以格式化替换字符串替换匹配的子序列。 - 找不到更多匹配时,如同用 out = std::copy(last_m.suffix().first, last_m.suffix().second, out) 复制剩余的非匹配字符到
out
,其中last_m
是找到的最后匹配的副本。 - 若无匹配,则原态地复制整个序列到
out
,以 out = std::copy(first, last, out) 。 - 若
flags
含有 std::regex_constants::format_no_copy ,则不复制非匹配的子序列到out
。 - 若
flags
含有 std::regex_constants::format_first_only ,则只替换首个匹配。
- 如同以 std::regex_iterator<BidirIt, CharT, traits> i(first, last, re, flags) 构造 std::regex_iterator 对象
result
,并调用 std::regex_replace(std::back_inserter(result), s.begin(), s.end(), re, fmt, flags) 。result
并调用 std::regex_replace(std::back_inserter(result), s, s + std::char_traits<CharT>::length(s), re, fmt, flags) 。参数
first, last | - | 以一对迭代器表示的输入字符序列 |
s | - | 以 std::basic_string 或字符数组表示的输入字符序列 |
re | - | 将与输入序列匹配的 std::basic_regex |
flags | - | std::regex_constants::match_flag_type 类型的匹配标志 |
fmt | - | 正则表达式替换格式字符串,准确语法依赖于 flags 的值
|
out | - | 存储替换结果的输出迭代器 |
类型要求 | ||
-OutputIt 必须满足遗留输出迭代器 (LegacyOutputIterator) 的要求。
| ||
-BidirIt 必须满足遗留双向迭代器 (LegacyBidirectionalIterator) 的要求。
|
返回值
out
在所有插入后的副本。result
。异常
可能抛出指示错误条件的 std::regex_error 。
示例
#include <iostream> #include <iterator> #include <regex> #include <string> int main() { std::string text = "Quick brown fox"; std::regex vowel_re("a|e|i|o|u"); // 写结果到输出迭代器 std::regex_replace(std::ostreambuf_iterator<char>(std::cout), text.begin(), text.end(), vowel_re, "*"); // 构造保有结果的字符串 std::cout << '\n' << std::regex_replace(text, vowel_re, "[$&]") << '\n'; }
输出:
Q**ck br*wn f*x Q[u][i]ck br[o]wn f[o]x
参阅
(C++11) |
尝试匹配一个正则表达式到字符序列的任何部分 (函数模板) |
(C++11) |
特定于匹配的选项 (typedef) |