我可以在regex_replace中使用$ 1吗?

时间:2011-10-11 07:45:06

标签: c++ regex replace c++11

通过阅读regex_replace(28.11.4)的FCD,我只能猜测该函数还可以使用原始字符串的一部分进行替换?我不能用我的gcc测试它,这是正确的吗?

using namespace std;
regex rx{ R"((\d+)-(\d+))" }; // regex: (\d+)-(\d+)
cout << regex_replace("123-456", rx, "b: $2, a:$1");
// "b: 456, a:123"

如您所见,我认为$1$2指的是“()”捕获群组(而不是\1和{{1}像其他地方一样)。

更新。所以,我想这是一个由两部分组成的问题

  • 是否支持在替代文字中使用捕获群组
  • 使用\2 n 的默认ECMAScript语法?$ n

2 个答案:

答案 0 :(得分:7)

C ++ 2011 FDIS中的表139列出了两个常量,可用于影响regex_replaceformat_defaultformat_sed中格式字符串的规则。 format_default被描述为使用“ECMA-262中的ECMAScript替换函数使用的规则,第15.5.4.11节String.prototype.replace”。此标准确实表明使用$进行反向引用。请参阅:ECMA-262

使用format_sed标志代替使用POSIX中sed实用程序的规则。 Sed似乎不支持$反向引用。

答案 1 :(得分:1)

我很惊讶; $不在基本源字符集(2.3)中。 TR1的Dinkumware documentation表明它确实是\1,而且它是方言依赖的。