2013-04-13 84 views
0

,同時通過我閱讀文檔會是諒解的精神語法

由逗號分隔雙打的字符串,我們可以這個樣子(我的理解)

double_ >> * (',' >> double_)double_ %

但下面的表達意味着什麼。它應該將逗號分隔的字符串分割成一個向量,它可以工作。如果有人能夠善意澄清,我將不勝感激。我很困惑與-運營商,我相信它的不同運營商,但我不能在這裏

*(qi::char_ - ',') % ','

回答

5

*(char_ - ',')表示「匹配零個或多個字符,但匹配','」,它也可以這樣寫:*~char_(",")。另一方面,*char_意味着「匹配零個或多個字符」。

要理解,爲什麼需要排除,只好試一下,沒有它:

#include <string> 
#include <boost/spirit/home/qi.hpp> 
int main() 
{ 
    using namespace boost::spirit::qi; 
    std::vector<std::string> out1, out2; 
    std::string s = "str1, str2, str3"; 
    bool b = parse(s.begin(), s.end(), *~char_(",") % ",", out1); // out1: ["str1", "str2", "str3"] 
    b = parse(s.begin(), s.end(), *char_ % ",", out2); // out2: ["str1, str2, str3"] 
} 
+0

感謝那些幫助 – Rajeshwar

+0

+1的解釋和'〜charset'參考 – sehe

0

qi::char_ - ','比賽找出其角色的所有字符,但,防止過於貪婪的內心表達。

0

你真的需要閱讀EBNF標準來理解Boost.Spirit。