2017-11-19 5 views
1

私はタグシーケンスまでの、そしてタグシーケンスを含む多くのバイトを取るnomパーサーコンビネータを書いてみたいです。私はtake_until_and_consume!を使用してみましたが、私は、生成されたパーサコンビネータは、タグ配列を捨てることがわかった:タグをスキップしないtake_until_and_consumeのようなパーサーコンビネータを実装する方法は?

Done([], [32, 32, 32, 32]) 

私が望むどのようなタグ配列のためである(この場合は、:には

#[macro_use] 
extern crate nom; 

named!(up_to_and_including_backslash, take_until_and_consume!("\\")); 

fn main() { 
    let res = up_to_and_including_backslash(b" \\"); 
    println!("{:?}", res); 
} 

結果バックスラッシュ文字)を結果に含める:

Done([], [32, 32, 32, 32, 92]) 

どのようにしてこれを行うことができますか?

答えて

0

今あなたがそのドキュメント言う方法take_until_and_consume使用している:

は、指定されたバイトシーケンス が見つかるまでバイトを消費するパーサを生成し、

それを消費するザ・パートが重要である消費しますあなたが避けたいものですから。

あなたは、これに似た何かを行うことができます:

named!(up_to_and_including_backslash, 
    do_parse!(
     line: take_until!("\\") >> char!('\\') >> 
     (line) 
    ) 
); 

あなたの区切り文字で行を返す必要があります。

+0

私はあなたの提案した解決策を試しましたが、結果はまだ 'Done([]、[32,32,32,32])'です。 –

関連する問題