c ++正则表达式match_results生命周期

时间:2017-04-04 19:34:27

标签: c++ regex c++11

第一次测试通过,第二次测试失败。

TEST_METHOD(ShouldMatchText) {
    std::wsmatch match;
    std::wstring text(L"abc");
    std::regex_match(text, match, std::wregex(L"(.*)"));
    Assert::AreEqual(std::wstring(L"abc"), std::wstring(match[1]));
}

TEST_METHOD(ShouldMatchText2) {
    std::wsmatch match;
    {
        std::wstring text(L"abc");
        std::regex_match(text, match, std::wregex(L"(.*)"));
    }
    Assert::AreEqual(std::wstring(L"abc"), std::wstring(match[1]));
}

似乎match_results指的是内部匹配的字符串。有没有办法使math_results有效,即使在匹配的字符串取消分配后?因为在我的实际情况中,匹配的字符串是temp,我确实希望稍后在其他范围中使用匹配的组。

如果可能,最好扩展现有的match_results,其他解决方案(如使用向量来保存组)将丢失信息。

刚刚注意到http://en.cppreference.com/w/cpp/regex/match_results

的解释
  

这是一个专门的分配器感知容器。它只能是   默认创建,从std :: regex_iterator获取,或由。修改   std :: regex_search或std :: regex_match。因为std :: match_results   持有std :: sub_matches,每个都是一对迭代器   匹配的原始字符序列,它是未定义的行为   如果原始字符序列是,则检查std :: match_results   由于其他原因,销毁或其迭代器无效。

0 个答案:

没有答案