使用boost正则表达式提取所有以短划线分隔的数字

extract all dash separated digits using boost regex

本文关键字:分隔 数字 正则表达式 boost 提取 使用      更新时间:2023-10-16

我想使用boost regex从c++中的字符串中提取所有以短划线分隔的数字(如232-65)我用这个图案

\d*-\d*

但是仅检测到第一匹配。我应该怎么做才能提取所有匹配的模式。

示例输入:

"2 1 5-25 37 42 43 53 69-119 123-514"

输出只有5-25,但必须是5-25 69-119 123-514

我的样本代码是

    cmatch res;
boost::regex port("\d*-\d*");
regex_search(s,res, port);
for (unsigned int i = 0; i < res.size(); ++i) {
    cout << res[i] << endl;
}

这适用于C++11,但您应该能够用boost::替换std::,使其与Boost 一起工作

std::string s = std::string("2 1 5-25 37 42 43 53 69-119 123-514");
std::regex port("\d*-\d*");
std::sregex_token_iterator iter(s.begin(), s.end(), port);
std::sregex_token_iterator end;
for(; iter != end; ++iter) 
{
    std::cout << iter->str() << std::endl;
}

取自Boost C++正则表达式-如何获得多个匹配

如果你想使用const char*,它应该是:

const char *s = "2 1 5-25 37 42 43 53 69-119 123-514";
std::regex port("\d*-\d*");
std::cregex_token_iterator iter(s, s + strlen(s), port);
std::cregex_token_iterator end;
for(; iter != end; ++iter) 
{
    std::cout << iter->str() << std::endl;
}

您希望在正则表达式中嵌入带括号的"子表达式",这些表达式将在匹配过程中提取。阅读boost页面,搜索匹配的子表达式。。。。