Boost(1.34)正则表达式语法错误

时间:2011-03-28 14:30:25

标签: regex boost c++11 boost-regex

我已经阅读了一些文档,我对VS2010附带的当前版本更熟悉。但是现在我被ubuntu 8.04困住了,并且提升了1.34并且得到了一些奇怪的错误。任何人都能说出我做错了什么。以下是regex_search boost v1.34

的手册页

以下是我在代码中所做的事情:

std::string sLine;
getline(dataFile, sLine);
boost::match_results<std::string::const_iterator> lineSmatch; 
boost::match_flag_type regFlags = boost::match_default;    
boost::regex finalRegex(linePattern);

boost::regex_search(sLine.begin(), sLine.end(), lineSmatch, finalRegex, regFlags);

以下是编译错误:

错误:没有匹配函数来调用'regex_search(__ gnu_cxx :: __ normal_iterator,std :: allocator&gt;&gt ;, __gnu_cxx :: __ normal_iterator,std :: allocator&gt;&gt;,boost :: match_results&lt; __ gnu_cxx :: __normal_iterator,std :: allocator&gt;&gt;,std :: allocator,std :: allocator&gt;&gt;&gt;&gt;&gt;&amp;,boost :: regex&amp;,boost :: regex_constants :: match_flag_type&amp;)'< / p>

2 个答案:

答案 0 :(得分:1)

如果您要将regex_search应用于sLine而不是iterator sLine范围,因为 Howard 已回答,您可以使用begin()代替 end()boost::regex_search(sLine, lineSmatch, finalRegex, regFlags);
例如:

iterator

如果您必须将regex_search范围提供给match_results,那么就是类型 const_iterator的参数是regex_search,第一个和第二个 const_iterator的参数也需要std::string::const_iterator b = sLine.begin(), e = sLine.end(); boost::regex_search(b, e, lineSmatch, finalRegex, regFlags); 例如:

{{1}}

希望这有帮助

答案 1 :(得分:0)

无法帮助您专门使用ubuntu 8.04,并提升1.34。但是,在libc++实现C ++ 11的情况下,我编译了以下内容。也许它与您的环境足够接近,可以告诉您哪里出了问题。

#include <regex>
#include <fstream>

int main()
{
    std::ifstream dataFile;
    std::string sLine, linePattern;
    getline(dataFile, sLine);
    std::match_results<std::string::const_iterator> lineSmatch; 
    std::regex_constants::match_flag_type regFlags = 
                                        std::regex_constants::match_default;    
    std::regex finalRegex(linePattern);

    std::regex_search(sLine, lineSmatch, finalRegex, regFlags);
}