【发布时间】:2015-04-27 12:26:42
【问题描述】:
我在 Visual Studio 2013 上看到了我认为是错误的东西,我希望有人能确认一下吗?
string foo{ "A\nB\rC\n\r" };
vector<string> bar;
for (sregex_iterator i(foo.cbegin(), foo.cend(), regex("(.*)[\n\r]{1,2}")); i != sregex_iterator(); ++i){
bar.push_back(i->operator[](1).str());
}
此代码在 Visual Studio 正则表达式库中遇到调试断言:
regex_iterator孤儿
如果我在 for 循环之外定义 regex 就可以了:
string foo{ "A\nB\rC\n\r" };
vector<string> bar;
regex bug("(.*)[\n\r]{1,2}");
for (sregex_iterator i(foo.cbegin(), foo.cend(), bug); i != sregex_iterator(); ++i){
bar.push_back(i->operator[](1).str());
}
另外,这在this question 中所示的转换中也可以正常工作:
string foo{ "A\nB\rC\n\r" };
vector<string> bar;
// This puts {"A", "B", "C"} into bar
transform(sregex_iterator(foo.cbegin(), foo.cend(), regex("(.*)[\n\r]{1,2}")), sregex_iterator(), back_inserter(bar), [](const smatch& i){ return i[1].str(); });
有人可以确认这是一个错误吗?
【问题讨论】:
标签: c++ regex c++11 visual-studio-2013 assertion