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

发布于 2024-12-09 02:19:32 字数 657 浏览 0 评论 0原文

通过阅读 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

微凉 2024-12-16 02:19:32

C++ 2011 FDIS 中的表 139 列出了两个常量,可用于影响 regex_replaceformat_defaultformat_sedformat_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 and format_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-262

Using the format_sed flag instead uses the rules for the sed utility in POSIX. Sed doesn't appear to support $ backreferences.

泛泛之交 2024-12-16 02:19:32

我会很惊讶; $ 不在基本源字符集 (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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文