我可以在 regex_replace 中使用 $1 吗?
通过阅读 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?
From reading the FCD for regex_replace
(28.11.4) I can only guess that the function can also use parts of the original string for replacing? I can not test it with my gcc, is this correct?
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"
As you can see, I assume $1
and $2
refer to the "()" capturing groups (and not \1
and \2
like elsewhere).
Update. So, I guess this is a two-part question
- Is this use of capturing groups in the replacement text supported at all?
- Is the default ECMAScript syntax using
$
n? Or\
n?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
C++ 2011 FDIS 中的表 139 列出了两个常量,可用于影响
regex_replace
、format_default
和format_sed
。format_default
被描述为使用“ECMA-262 第 15.5.4.11 部分 String.prototype.replace 中 ECMAScript 替换函数使用的规则”。该标准确实表明使用$
进行反向引用。请参阅:ECMA-262使用 < code>format_sed 标志改为使用 POSIX 中 sed 实用程序的规则。 Sed 似乎不支持
$
反向引用。Table 139 in the C++ 2011 FDIS lists two constants that can be used to affect the rules used for the format string in
regex_replace
,format_default
andformat_sed
.format_default
is described as using "the rules used by the ECMAScript replace function in ECMA-262, part 15.5.4.11 String.prototype.replace." This standard does indicate the use of$
for backreferences. See: ECMA-262Using the
format_sed
flag instead uses the rules for the sed utility in POSIX. Sed doesn't appear to support$
backreferences.我会很惊讶; $ 不在基本源字符集 (2.3) 中。 TR1 的 Dinkumware 文档声明它确实是
\1
,并且它依赖于方言。I'd be surprised; $ is not in the basic source character set (2.3). The Dinkumware documentation for TR1 states that it's indeed
\1
, and it's dialect-dependent.