通过阅读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 ?答案 0 :(得分:7)
C ++ 2011 FDIS中的表139列出了两个常量,可用于影响regex_replace
,format_default
和format_sed
中格式字符串的规则。 format_default
被描述为使用“ECMA-262中的ECMAScript替换函数使用的规则,第15.5.4.11节String.prototype.replace”。此标准确实表明使用$
进行反向引用。请参阅:ECMA-262
使用format_sed
标志代替使用POSIX中sed实用程序的规则。 Sed似乎不支持$
反向引用。
答案 1 :(得分:1)
\1
,而且它是方言依赖的。