我正在尝试使用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。我想知道如何从字符串中检索所有数字。
答案 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;
}