使用boost从字符串中提取内容

时间:2013-01-07 13:03:06

标签: c++ boost boost-regex

我最近编写了正则表达式来解析我的文件中的副本,但是那个是在.NET中,我现在开始使用Boost进行我的C ++项目。

我有一条类似于以下的行,它是一个std :: string
123 12 E

我必须解析并获得以下内容。

float =第一个数字
float =第二位数字 string =第三个字母

由于我有使用正则表达式的经验,我知道正则表达式是什么

const char* Regex = "^[[:space:]]*(\\d{1,3})[[:space:]]*(\\d{1,2})[[:space:]]*([NSEW])[[:space:]]*"

但我不知道如何使用它来提升从我的行中提取三件事。我尝试在Boost网站上阅读示例,但似乎没有回答我的问题,因为我不得不陷入困境才能找到这个小细节。如何使用上面的正则表达式将Boost Regex用于三个变量?

1 个答案:

答案 0 :(得分:1)

http://www.boost.org/doc/libs/1_52_0/libs/regex/doc/html/boost_regex/introduction_and_overview.html给出了匹配的示例。你最终得到一个match_results结构,你可以从中获得匹配。

未经测试的代码

const char *str = "123 12 E";
boost::regex re ("^(\\d{1,3}) (\\d{1,2}) ([NSEW])$");
boost::cmatch mr;
if (boost::regex_match ( str, mr, re )) {
    std::cout << "There were: " << mr.size () - 1 << " fields matched" << std::endl;
    std::cout << "First part: " << mr[1] << std::endl;
    }