1
我定義的規則:如何在PetitParser中使用但不捕獲一些字符?
def("invokation", char('@').word().plus().flatten());
對於 「@who」,它將匹配,並得到@who
作爲結果。
如何問它只是返回who
沒有@
?
我定義的規則:如何在PetitParser中使用但不捕獲一些字符?
def("invokation", char('@').word().plus().flatten());
對於 「@who」,它將匹配,並得到@who
作爲結果。
如何問它只是返回who
沒有@
?
不確定您的問題是關於PetitParser的Java或Dart?
無論如何,您需要將char('@')
和word().plus().flatten()
連接到一個序列。然後選擇列表結果列表的第二個元素,忽略第一個字符。
在Java中,這看起來是這樣的:
def("invokation", character('@')
.seq(word().plus().flatten())
.map(Functions.nthOfList(1));
,並在DART是這樣的:
def("invokation", char('@')
.seq(word().plus().flatten())
.pick(1));
順便說一句,我只是犯了一個改進PetitParser爲Java,這樣就可以在Java中使用pick(int)
太。
非常感謝你! – Freewind
我們可以添加一個API,如「drop()」,這意味着一些匹配器應該消耗輸入,但會丟失結果嗎?所以代碼可以是:'def(「invokation」,char('@')。drop().seq(word()。plus()。flatten())' – Freewind
這當然是可行的,但恕我直言導致所有例如,在上面的'seq(...)'中,單個單詞仍然會被包裝到一個列表中。一般來說,可組合性會受到很大影響。也就是說,沒有任何東西阻止你形成介紹放下其他新組合運營商。 –