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

标签 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\2 就像别处一样)。

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

  • 是否支持在替换文本中使用这种捕获组
  • 默认的ECMAScript语法是使用$n吗?还是\n ?

最佳答案

C++ 2011 FDIS 中的表 139 列出了两个常量,它们可用于影响 regex_replace 中用于格式字符串的规则。 、format_defaultformat_sedformat_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/

相关文章:

java - 迭代性能 Java 与 C++

c++ - 通过setargreferee传递 vector 时,gtest中的EXPECT_CALL未实现

bash - 在每次出现字符串时查找、替换和递增

javascript - 使用 DOJO 在 Javascript 中格式化字符串

c++ - 为什么模板允许具有非 constexpr 构造函数的 constexpr 函数成员?

c++ - 引用结构数组

c# - 如何使用正则表达式提取带引号的字符串?或者如何在 c# 中使用这个特定的正则表达式 ("[^"]*\.csv")?

javascript - 如何从 JSON 字符串中检索多个属性值

python re匹配字符串中的下划线或连字符

javascript - 将 'whatever' 添加到 Javascript 中的字符串