利用regex_search

时间:2014-10-14 16:21:19

标签: regex boost

我正在尝试使用Boost正则表达式模块从这种格式的字符串中提取数字:“{12354,21354,123}”

为此目的编写了以下代码。当我在循环中执行此操作时,字符串存储在it->c_str()

boost::cmatch matches;
boost::regex reNumber("-*[0-9.]+");
boost::regex reFiniteValues(" *\\{.*\\} *");
std::cout << "\ttesting for finite values" << std::endl;
if (boost::regex_match(it->c_str(), matches, reFiniteValues))
{
    boost::regex_search(it->c_str(), matches, reNumber);
    std::cout << "matches.size(): " << matches.size() << std::endl;
    for(unsigned int i = 0; i < matches.size(); ++i)
    {
        std::cout << matches[i] << std::endl;
    }
    if (matches.size() > 0)
    {
        std::cout << "\tpattern found" << std::endl;
        continue;
    }
}

matches对象的大小为1,在此示例中仅包含12354。我想知道如何从字符串中检索所有数字。

1 个答案:

答案 0 :(得分:0)

您可以尝试循环regex_search()。 -

typedef std::string::const_iterator SITR;

std::string str = it->c_str();
SITR start = str.begin();
SITR end   = str.end();
boost::smatch m;

while ( boost::regex_search (start, end, m, reNumber ) )
{
    std::cout << m[0].str() << std::endl;
    start = m[0].second;
}