我想将 std::string
转换为:
"{1, 2}, {one, two}, {123, onetwothree}"
进入 std::strings
的 std::pairs
的 std::vector
看起来像这样:
std::vector<std::pair<std::string, std::string>> v = {{"1", "2"}, {"one", "two"}, {"123", "onetwothree"}};
// where, for instance
v[0] == std::make_pair("1", "2"); // etc.
这似乎是原始 std::string 可以使用 std::regex
最容易地解析的情况,但我不是正则表达式专家(或新手),更不用说 std::regex
专家。这里的食谱有什么想法吗?
最佳答案
目前,<regex>
不适用于 GCC
,这里是一个提升版本,用 -lboost_regex
编译.
boost capture适合这种情况,但默认情况下未启用。
这是原帖:Boost C++ regex - how to get multiple matches
#include <iostream>
#include <string>
#include <boost/regex.hpp>
using namespace std;
int main()
{
string str = "{1, 2}, {one, two}, {123, onetwothree}";
boost::regex pair_pat("\\{[^{}]+\\}");
boost::regex elem_pat("\\s*[^,{}]+\\s*");
boost::sregex_token_iterator end;
for(boost::sregex_token_iterator iter(str.begin(), str.end(), pair_pat, 0);
iter != end; ++iter) {
string pair_str = *iter;
cout << pair_str << endl;
for (boost::sregex_token_iterator it(pair_str.begin(), pair_str.end(), elem_pat, 0);
it != end; ++it)
cout << *it << endl;
}
return 0;
}
关于c++ - 正则表达式从大括号构建 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20247009/