2015-10-14 64 views
0

我試着創建一個正則表達式,它匹配被推送到字符串向量上的字符串。是否可以創建單個正則表達式來匹配和提取所有「數字」值?創建一個正則表達式而不是多個表達式

std::vector<std::string> strings; 
strings.push_back("100/2"); 
strings.push_back("2"); 
strings.push_back("200/99"); 
strings.push_back("150/9*0"); 

std::regex rex1("(\\d{1,3})(\\/(\\d{1,2})(\\*(\\d+)))"); // matches 150/9*0 
std::regex rex2("(\\d{1,3})(\\/(\\d{1,2}))"); // matches 200/99 
for (size_t k = 0; k < strings.size(); k++) 
{ 
    std::smatch m; 
    std::regex_match(strings[k], m, rex1); 


    for (size_t i = 0; i < m.size(); i++) 
     std::cout << "match " << i << ": " << m[i] << std::endl; 
} 
+1

使用'regex_search'而不是'regex_match'? –

+0

如果您不關心操作員,您可以用'\ d +'搜索所有匹配項 – nhahtdh

+1

您的預期輸出是什麼?看看[這個演示](https://ideone.com/klF6lJ)。 –

回答

0
^(\\d{1,3})(\\/(\\d{1,2})(\\*(\\d+))?)?$ 

這使得第二半可選的(使「2」仍然匹配)並且使得* 0位後半部分內任選的。

$最後是必要的,以便如果字符串確實包含可選部分,那麼他們肯定仍然會匹配&捕獲。

相關問題