我編寫了一個分析器來查找字符串連接表達式。我有一系列的括號括起來的字符串,主要來自函數調用。
如何在註釋或引用時忽略分隔符
例如,("one"+"two"+"three") -> ("one"|"two"|"three")
是一個簡單的例子,我可以處理它。
更困難的情況是(null, "one"+"two"+"three", null) -> (null, "one"|"two"|"three", null)
,但我可以用boost::tokenizer
解析它。
(null, "one"+"two"+"three,four", 1 /* third parameter can be: 1, 2, 3 */)
,在這樣一個困難的例子中,我建議使用boost::spirit
解析,但我需要幫助爲它編寫一些規則。
後來:
好像escaped_list_separator
從boost::tokenizer
正是我需要的。 但我有一個問題吧:
using namespace std;
using namespace boost;
string s = "Field 1,\"putting quotes around fields, allows commas\",Field 3";
tokenizer<escaped_list_separator<char> > tok(s,escaped_list_separator<char>("", ",", "\""));
for(tokenizer<escaped_list_separator<char> >::iterator beg=tok.begin(); beg!=tok.end();++beg){
cout <<"~~~"<< *beg << "\n";
}
刪除"
我。它可以保持引號輸出這樣
Field 1
"putting quotes around fields, allows commas"
Field 3
這裏有足夠多的答案:http://stackoverflow.com/questions/1120140/csv-parser-in-c –