通过阅读 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
和 \2
就像别处一样)。
更新。所以,我想这是一个由两部分组成的问题
- 是否支持在替换文本中使用这种捕获组?
- 默认的ECMAScript语法是使用
$
n吗?还是\
n ?
最佳答案
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 似乎不支持 $
反向引用。
关于c++ - 我可以在 regex_replace 中使用 $1 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7722836/