2012-03-13 40 views
0

所有破折号分开的数字我想提取从在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; 
} 

回答

1

这是C++ 11,但你应该能够取代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++ regex - how to get multiple matches

采取如果你想使用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; 
} 
0

你想在正则表达式中嵌入括号中的“子表达式”,这些子表达式将在匹配过程中提取。去阅读升压页面,搜索子表达式匹配....