2012-11-01 120 views
1

這是一個相當快速的問題,我無法在boost文檔中找到它,也沒有找到任何其他boost正則表達式示例/教程。Boost.Regex分隔符解析

假設我想用這個實現來標記的字符串:

boost::regex re("[\\sXY]+"); 
std::string s; 

while (std::getline(std::cin, s)) { 
    boost::sregex_token_iterator i(s.begin(), s.end(), re, -1); 
boost::sregex_token_iterator j; 
    while (i != j) { 
    std::cout << *i++ << " "; 
    } 
    std::cout << std::endl; 
} 

的問題是分隔符表達式將不會被重複。我也需要分隔符字符串。我怎樣才能確定這一點?

回答

0

如果我理解正確,你還想遍歷分隔符,除了遍歷令牌。創建另一個令牌迭代器來查找由正則表達式標識的令牌是不夠的嗎?

boost::sregex_token_iterator i(s.begin(), s.end(), re, -1); 

boost::sregex_token_iterator j; 
//now find the tokens that match the regex -> the delimiters 
boost::sregex_token_iterator begin(s.begin(), s.end(), re), end; 
while (i != j) 
    { 
    std::cout << *i++ << " "; 
    if(begin != end) 
     { 
     std::cout << "(delimiter = " << *begin++ << ") "; 
     } 
    } 
+0

是準確的,但現在是分隔符和其他標記沒有以正確的順序......我想分割字符串,但分隔符必須是其他標記之間和** **必須是在正確的順序。 – Tim

+0

對不起,你完全正確!每個令牌都由分隔符分隔。謝謝! – Tim