2013-06-28 30 views
2

有一個內置的whitespace()解析器PetitParserDart,檢查字符:如何在PetitParser中創建一個空白但不是行分隔符的分析器?

(9 <= value && value <= 13) || (value == 32) || (value == 160) 
    || (value == 5760) || (value == 6158) || (8192 <= value && value <= 8202) || (value == 8232) 
    || (value == 8233) || (value == 8239) || (value == 8287) || (value == 12288) 

現在我想自定義空白解析器是whitespace()分析器,但不接受行分隔符\n

如何做到這一點,我不想複製和修改whitespace()中的代碼。有一個更好的方法嗎?

回答

3

有很多種方法可以做到這一點。一個可重用現有的解析器

一種方法是:

char('\n').not().seq(whitespace()).pick(1); 

另一種方法是創建一個新的字符圖案:

pattern('\t\f\r '); 

這不完全匹配的所有unicode的空格是whitespace()接受,但對大多數使用情況來說可能就足夠了。或者,您也可以添加unicode範圍以及:

pattern('\t\f\r \u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000'); 
+0

我最喜歡第一個,謝謝! – Freewind

相關問題