c++ - 正则表达式从大括号构建 vector

标签 c++ regex parsing c++11

我想将 std::string 转换为:

"{1, 2}, {one, two}, {123, onetwothree}"

进入 std::stringsstd::pairsstd::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/

相关文章:

c++ - Boost Python 和 C++ 头文件

c# - 如何获取字符串的最后一部分?

regex - 正则表达式: match any word until first space

html - 从 IMG 标签解析 "SRC"的 XPath?

python - 如何在Python中将XML文件转换为类/对象结构?

c++ - 第二次调用 mysql_fetch_row 时出现段错误

c++ - 为什么库标题中的所有内容都以下划线开头?

c++ - 多次从 std::cin 读取——Linux 和 Mac OS X 上的不同行为

JAVA 正则表达式 : Making custom regex for String. split()

ios - 从 iOS Swift 中的 xml 文本文件中提取 Json