nomはrust用のパーサコンビネータです。 https://github.com/Geal/nom/
Qiitaの記事を見て使ってみましたが、小一時間ハマったので結果をメモ
元ネタ https://qiita.com/k5n/items/e95842744fc5db931d03
このサンプルが最新のnomでは動きませんでした。
Cargo.toml
[dependencies] nom = "^4.2"
とりあえずchain!が影も形もなくて、do_parse!で置き換え、結果の受け取り方も少し変わっています。
#[macro_use] extern crate nom; use nom::{space, alpha}; named!(name_parser<&str>, do_parse!( tag!("Hello,") >> space >> name: map_res!(alpha, std::str::from_utf8) >> (name) ) ); fn main() { match name_parser("Hello, world!".as_bytes()) { Ok(name) => println!("name = {:?}", name), _ => println!("Error") } }
これを実行すると、ちゃんと動いているようです。
name = ([33], "world")