使用C ++ STl TR1正则表达式在2个分隔符之间获取字符串

时间:2016-10-20 11:24:38

标签: c++ regex stl

我想在open和close括号之间提取字符串。如果内容是

145(5)(7)

输出必须

5

7

我使用下面的代码

尝试使用C ++ STL TR1
const std::tr1::regex pattern("\\((.*?)\\)");

// the source text
std::string text= "145(5)(7)";

 const std::tr1::sregex_token_iterator end;
 for (std::tr1::sregex_token_iterator i(text.begin(),
      text.end(), pattern);
      i != end;
      ++i)
 {
      std::cout << *i << std::endl;
 }

我得到输出为

(5)

(7)

我希望输出没有分隔符。

请使用STL TR1帮助我满足我的要求。

1 个答案:

答案 0 :(得分:0)

您需要使用sregex_iterator代替sregex_token_iterator,然后通过.str(n)访问子匹配:

const std::tr1::regex pattern1("\\((.*?)\\)");
std::string text= "145(5)(7)";
const std::tr1::sregex_iterator end;
for (std::tr1::sregex_iterator i(text.begin(),
    text.end(), pattern1);
    i != end;
    ++i)
{
    std::cout << (*i).str(1) << std::endl;
}

enter image description here