命名空间
变体
操作

std::regex_replace

来自 cppreference.com
< cpp‎ | regex
定义在头文件 <regex>
template< class OutputIt, class BidirIt,

          class Traits, class CharT,
          class STraits, class SAlloc >
OutputIt regex_replace( OutputIt out, BidirIt first, BidirIt last,
                        const std::basic_regex<CharT,Traits>& re,
                        const std::basic_string<CharT,STraits,SAlloc>& fmt,
                        std::regex_constants::match_flag_type flags =

                            std::regex_constants::match_default );
(1) (自 C++11 起)
template< class OutputIt, class BidirIt,

          class Traits, class CharT >
OutputIt regex_replace( OutputIt out, BidirIt first, BidirIt last,
                        const std::basic_regex<CharT,Traits>& re,
                        const CharT* fmt,
                        std::regex_constants::match_flag_type flags =

                            std::regex_constants::match_default );
(2) (自 C++11 起)
template< class Traits, class CharT,

          class STraits, class SAlloc,
          class FTraits, class FAlloc >
std::basic_string<CharT,STraits,SAlloc>
    regex_replace( const std::basic_string<CharT,STraits,SAlloc>& s,
                   const std::basic_regex<CharT,Traits>& re,
                   const std::basic_string<CharT,FTraits,FAlloc>& fmt,
                   std::regex_constants::match_flag_type flags =

                       std::regex_constants::match_default );
(3) (自 C++11 起)
template< class Traits, class CharT,

          class STraits, class SAlloc >
std::basic_string<CharT,STraits,SAlloc>
    regex_replace( const std::basic_string<CharT,STraits,SAlloc>& s,
                   const std::basic_regex<CharT,Traits>& re,
                   const CharT* fmt,
                   std::regex_constants::match_flag_type flags =

                       std::regex_constants::match_default );
(4) (自 C++11 起)
template< class Traits, class CharT,

          class STraits, class SAlloc >
std::basic_string<CharT>
    regex_replace( const CharT* s,
                   const std::basic_regex<CharT,Traits>& re,
                   const std::basic_string<CharT,STraits,SAlloc>& fmt,
                   std::regex_constants::match_flag_type flags =

                       std::regex_constants::match_default );
(5) (自 C++11 起)
template< class Traits, class CharT >

std::basic_string<CharT>
    regex_replace( const CharT* s,
                   const std::basic_regex<CharT,Traits>& re,
                   const CharT* fmt,
                   std::regex_constants::match_flag_type flags =

                       std::regex_constants::match_default );
(6) (自 C++11 起)

regex_replace 使用正则表达式对字符序列执行替换

1) 将范围 [firstlast) 中的字符复制到 out 中,将匹配 re 的任何序列替换为 fmt 格式化的字符。换句话说
  • 构建一个 std::regex_iterator 对象 i,就像使用 std::regex_iterator<BidirIt, CharT, traits> i(first, last, re, flags) 一样,并使用它遍历序列 [firstlast)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,则只替换第一个匹配项。
2)(1) 相同,但格式化的替换执行方式就像调用 out = m.format(out, fmt, fmt + char_traits<CharT>::length(fmt), flags) 一样。
3,4) 构建一个类型为 std::basic_string<CharT, ST, SA> 的空字符串 result,并调用 std::regex_replace(std::back_inserter(result), s.begin(), s.end(), re, fmt, flags).
5,6) 构建一个类型为 std::basic_string<CharT> 的空字符串 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 的要求。

[编辑] 返回值

1,2) 在所有插入完成后返回输出迭代器 out 的副本。
3-6) 返回包含输出的字符串 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

[编辑] 另请参阅

尝试将正则表达式与字符序列的任何部分匹配。
(函数模板) [编辑]
匹配的特定选项。
(typedef) [编辑]
替换字符串的指定部分。
(std::basic_string<CharT,Traits,Allocator> 的公共成员函数) [编辑]