我可以只调用boost_replace而不是搜索和替换

时间:2013-07-04 14:16:19

标签: c++ regex boost

我有以下功能(可行):

    boost::regex ex(REGEX_TAG);
    boost::match_results<std::string::const_iterator> extend;
    std::string::const_iterator start, end;
    boost::match_flag_type flags;
    std::string value("");

    start = input.begin();
    end = input.end();
    flags = boost::match_default;
    // The question start here 
    while (boost::regex_search(start, end, extend, ex, flags))
      {
        try
          {
            value = boost::any_cast<std::string>(param.at(extend[1]));
          }
        catch (const boost::bad_any_cast& err) {}
        catch (const std::out_of_range& err){}
        input = boost::regex_replace(input, ex, value, boost::match_default | boost::format_first_only);
        value.clear();
        start = extend[0].second;
        flags |= boost::match_prev_avail;
        flags |= boost::match_not_bob;
      }

但我实际上使用的是两个正则表达式函数,我猜它们会做很多相似的事情(找到表达式......)。 您是否知道要删除boost::regex_search并获得相同的输出

编辑:

我正在尝试解析django的模板文件:

输入:{{ lastName }} : {{ firstName }}

param是字符串的地图,boost :: any const std::map<std::string, boost::any>&

和REGEX_TAG:#define REGEX_TAG "\\{\\{ ([a-zA-Z0-9_-]+) \\}\\}"

它正在运作,我只是问我是否可以移除boost::regex_search,因为boost::regex_replace也在搜索(我猜)

0 个答案:

没有答案