function template
<regex>

std::regex_replace

c-string/c-string (1)
template <class traits, class charT>  basic_string<charT> regex_replace (const charT* s,          const basic_regex<charT,traits>& rgx,          const charT* fmt,          regex_constants::match_flag_type flags = regex_constants::match_default);
c-string/string (2)
template <class traits, class charT, class ST, class SA>  basic_string<charT> regex_replace (const charT*s,          const basic_regex<charT,traits>& rgx,          const basic_string<charT,ST,SA>& fmt,          regex_constants::match_flag_type flags = regex_constants::match_default);
string/c-string (3)
template <class traits, class charT, class ST, class SA>  basic_string<charT,ST,SA> regex_replace (const basic_string<charT,ST,SA>& s,          const basic_regex<charT,traits>& rgx,          const charT* fmt,          regex_constants::match_flag_type flags = regex_constants::match_default);
string/string (4)
template <class traits, class charT, class ST, class SA, class FST, class FSA>  basic_string<charT,ST,SA> regex_replace (const basic_string<charT,ST,SA>& s,          const basic_regex<charT,traits>& rgx,          const basic_string<charT,FST,FSA>& fmt,          regex_constants::match_flag_type flags = regex_constants::match_default);
range/c-string (5)
template <class OutputIterator, class BidirectionalIterator,          class traits, class charT>  OutputIterator regex_replace (OutputIterator out,          BidirectionalIterator first, BidirectionalIterator last,          const basic_regex<charT,traits>& rgx,          const charT* fmt,          regex_constants::match_flag_type flags = regex_constants::match_default);
range/string (6)
template <class OutputIterator, class BidirectionalIterator,          class traits, class charT, class ST, class SA>  OutputIterator regex_replace (OutputIterator out,          BidirectionalIterator first, BidirectionalIterator last,          const basic_regex<charT,traits>& rgx,          const basic_string<charT,ST,SA>& fmt,          regex_constants::match_flag_type flags = regex_constants::match_default);
替换匹配序列
使用正则表达式rgx(模式)的所有匹配项都被fmt(替换)替换,从而创建目标序列(主题)的副本。根据所使用的版本,目标序列sfirstlast之间的字符序列。

版本1234将结果序列作为string对象返回。版本56输出迭代器作为第一个参数,用于存储结果序列。

一个可选参数flags允许指定如何匹配表达式和格式化表达式的选项。

参数

s
包含目标序列(主题)的字符串。
rgx
一个用于匹配的basic_regex对象(模式)。
fmt
包含每次匹配替换的字符串。
这可能包含格式说明符和转义序列,它们将被表示的字符替换。对于format_default,可能的说明符是
字符替换内容
$nn次反向引用(即,与正则表达式模式中用括号指定的第n个匹配组的副本)。
n必须是一个整数值,表示一个有效的反向引用,大于0,最多两位数。
$&整个匹配的副本
$`前缀(即,目标序列中位于匹配之前的部分)。
后缀(即,目标序列中位于匹配之后的部分)。
$$单个$字符。
标志
用于控制rgx如何匹配以及fmt如何格式化的标志。
这些常量可以一个或多个(使用按位或运算符 |)组合,形成一个有效的位掩码值,类型为regex_constants::match_flag_type:
flag*effects说明
match_default默认默认匹配行为。
此常量的值为零**。
match_not_bol非行首第一个字符不被视为行首"^"不匹配)。
match_not_eol非行尾最后一个字符不被视为行尾"$"不匹配)。
match_not_bow非词首转义序列"\b"不匹配作为词首
match_not_eow非词尾转义序列"\b"不匹配作为词尾
match_any任何匹配如果可能存在多个匹配,则接受任何匹配。
match_not_null非空空序列不匹配。
match_continuous连续表达式必须匹配以第一个字符开始的子序列。
子序列必须以第一个字符开始才能匹配。
match_prev_avail先前可用第一个字符之前存在一个或多个字符。(match_not_bolmatch_not_bow被忽略)
format_default默认格式使用标准的格式化规则替换匹配项(ECMAScript的replace方法使用的规则)。
此常量的值为零**。
format_sedsed 格式使用与 POSIX 中 sed 实用程序相同的规则来替换匹配项。
format_no_copy不复制替换匹配项时,不会复制目标序列中与正则表达式不匹配的部分。
format_first_only仅首次仅替换正则表达式的第一次出现。
* 这些位掩码标志名称可在std::regex_constants命名空间下找到(更多详情请参见regex_constants)。
** 值为零的常量如果设置了其他标志,则会被忽略。
match_flag_type是一个可在std::regex_constants命名空间内定义。
下可用的类型
输出迭代器类型的类型,指向序列的第一个字符,结果序列存储在那里。
函数模板类型可以是任何类型的输出迭代器到字符。
first, last
双向迭代器,指向用作匹配目标序列的字符范围的起始和结束位置。使用的范围是[first,last),其中包括firstlast之间的所有字符,包括first指向的字符,但不包括last指向的字符。
函数模板类型可以是任何指向字符的双向迭代器

返回值

版本1234返回一个包含结果序列的string对象。
版本56返回out
版本56返回一个指向out指向的序列中最后一个写入字符之后的元素的迭代器。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// regex_replace example
#include <iostream>
#include <string>
#include <regex>
#include <iterator>

int main ()
{
  std::string s ("there is a subsequence in the string\n");
  std::regex e ("\\b(sub)([^ ]*)");   // matches words beginning by "sub"

  // using string/c-string (3) version:
  std::cout << std::regex_replace (s,e,"sub-$2");

  // using range/c-string (6) version:
  std::string result;
  std::regex_replace (std::back_inserter(result), s.begin(), s.end(), e, "$2");
  std::cout << result;

  // with flags:
  std::cout << std::regex_replace (s,e,"$1 and $2",std::regex_constants::format_no_copy);
  std::cout << std::endl;

  return 0;
}

输出
there is a sub-sequence in the string
there is a sequence in the string
sub and sequence


另见