我一直在阅读6.2.1的文档,nom
并且正在尝试构建一个解析器,它将匹配任意数量的字符(包括零),后跟单词 foobar: /.*foobar/
。
nom::bytes::complete::take_until("foobar")
几乎做了我想要的,但它不会消耗foobar
自己,所以我不得不这样做:
use nom::bytes::complete::{tag, take_until};
use nom::combinator::value;
use nom::sequence::tuple;
use nom::IResult;
// This method does what I want, but is verbose because foobar is repeated
fn arbitrary_and_then_foobar(s: &str) -> IResult<&str, ()> {
value((), tuple((take_until("foobar"), tag("foobar"))))(s)
}
我倾向于根据传统的正则表达式语法进行思考,然后必须将其映射到提供的可用构造nom
。我越来越善于注意到nom
结构更适合的场景,但是是否有 regex-to-nom 备忘单?