第一次测试通过,第二次测试失败。
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 由于其他原因,销毁或其迭代器无效。