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 对象
i
,就像使用 std::regex_iterator<BidirIt, CharT, traits> i(first, last, re, flags) 一样,并使用它遍历序列[
first,
last)
中 re 的所有匹配项。 - 对于每个这样的匹配项
m
,将非匹配子序列 (m.prefix()
) 复制到 out 中,就像使用 out = std::copy(m.prefix().first, m.prefix().second, out) 一样,然后用格式化的替换字符串替换匹配的子序列,就像调用 out = m.format(out, fmt, flags) 一样。 - 当没有更多匹配项时,将剩余的非匹配字符复制到 out 中,就像使用 out = std::copy(last_m.suffix().first, last_m.suffix().second, 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 对象
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 |
fmt | - | 正则表达式替换格式字符串,确切语法取决于 flags 的值 |
flags | - | 类型为 std::regex_constants::match_flag_type 的匹配标志 |
out | - | 存储替换结果的输出迭代器 |
类型要求 | ||
-OutputIt 必须满足 LegacyOutputIterator 的要求。 | ||
-BidirIt 必须满足 LegacyBidirectionalIterator 的要求。 |
[编辑] 返回值
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"); // write the results to an output iterator std::regex_replace(std::ostreambuf_iterator<char>(std::cout), text.begin(), text.end(), vowel_re, "*"); // construct a string holding the results 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) |
替换字符串的指定部分。 ( std::basic_string<CharT,Traits,Allocator> 的公共成员函数) |