编号后引用后跟字面数字

时间:2014-09-29 19:58:35

标签: c++ regex visual-studio-2012

我试图执行正则表达式替换。我似乎无法弄清楚的具体问题是,在我的第二次反向引用后,我有一个字符串文字编号(数字1)。使用MS Visual Studio 2012(C ++控制台项目......而不是.NET),它不起作用。我假设因为它需要我的反向引用为21美元,而不是2美元。我尝试了各种语法,但无法提出有效的方法!

std::string input = "my_variable_name_iei_lo1";
std::string regx = "(\\w+)iei_(lo_hi)1";
std::string sub = "$1ied_$21";

std::regex rx(regx);

std::string result = std::regex_replace(input, rx, sub);

// result is "my_variable_name_ied_"
// should be "my_variable_name_ied_lo1"

我尝试了各种指定反向引用的方法:

std::string sub = "$1ied_${2}1";

// result is "my_variable_name_ied_${2}1"
// should be "my_variable_name_ied_lo1"

其他的东西给我语法错误,包括尝试使用命名捕获组,但后来读取不再支持。如此接近我的答案,但仍然遥远!

1 个答案:

答案 0 :(得分:0)

Gunn找到的解决方案:

Using $021 worked! I knew about the two digit limitation (99 capture groups)
but for whatever reason, never thought to try 01, 02, etc. So having the substitution
string be "$01ied_$021" gives me the result I was looking for. Thanks!